dart-sdk/runtime/vm
Daco Harkes 762c507553 [vm/ffi] Outlining state transitions in AOT
For single argument FFI calls:
- reduces trampoline size significantly (up to 50%, 150-170 bytes),
- reduces the compressed size of GPay by 2.5kb on arm64,
- regresses performance on arm64 (up to 2.5%).
For more arguments, percentage-wise size gains and speed regressions
are smaller.

Only applied on arm and arm64, we care about code size for these.

Note: On Raspberry Pie (arm), the performance regression on single-
argument calls regresses up to 30%.

TEST=tests/ffi/*

Design doc: https://go/dart-ffi-outline-state-transitions
Closes: https://github.com/dart-lang/sdk/issues/50094
Change-Id: I8b8d7da45f69be6ac1432b11b695de71e56acfd1
Cq-Include-Trybots: luci.dart.try:vm-precomp-ffi-qemu-linux-release-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-android-debug-arm-try,vm-kernel-nnbd-mac-debug-arm64-try
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/262343
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Daco Harkes <dacoharkes@google.com>
2022-10-25 13:07:34 +00:00
..
compiler [vm/ffi] Outlining state transitions in AOT 2022-10-25 13:07:34 +00:00
heap [vm/ffi] FfiNative process lookup 2022-10-25 10:57:07 +00:00
libfuzzer
service
allocation.cc
allocation.h
allocation_test.cc
analyze_snapshot_api_impl.cc
app_snapshot.cc
app_snapshot.h
assert_test.cc
atomic_test.cc
base64.cc
base64.h
base64_test.cc
base_isolate.h
benchmark_test.cc
benchmark_test.h
bit_set.h
bit_set_test.cc
bit_vector.cc
bit_vector.h
bit_vector_test.cc
bitfield.h
bitfield_test.cc
bitmap.cc
bitmap.h
bitmap_test.cc
boolfield.h
boolfield_test.cc
bootstrap.cc
bootstrap.h
bootstrap_natives.cc
bootstrap_natives.h
bss_relocs.cc
bss_relocs.h
BUILD.gn
canonical_tables.cc
canonical_tables.h
catch_entry_moves_test.cc
class_finalizer.cc
class_finalizer.h
class_finalizer_test.cc
class_id.h
class_table.cc
class_table.h
closure_functions_cache.cc
closure_functions_cache.h
code_comments.cc
code_comments.h
code_descriptors.cc
code_descriptors.h
code_descriptors_test.cc
code_entry_kind.h
code_observers.cc
code_observers.h
code_patcher.cc
code_patcher.h
code_patcher_arm.cc
code_patcher_arm64.cc
code_patcher_arm64_test.cc
code_patcher_arm_test.cc
code_patcher_ia32.cc
code_patcher_ia32_test.cc
code_patcher_riscv.cc
code_patcher_riscv_test.cc
code_patcher_x64.cc
code_patcher_x64_test.cc
compiler_test.cc
constants.h
constants_arm.cc
constants_arm.h
constants_arm64.cc
constants_arm64.h
constants_base.h
constants_ia32.cc
constants_ia32.h
constants_riscv.cc
constants_riscv.h
constants_x64.cc
constants_x64.h
constants_x86.h
cpu.h
cpu_arm.cc
cpu_arm.h
cpu_arm64.cc
cpu_arm64.h
cpu_ia32.cc
cpu_ia32.h
cpu_riscv.cc
cpu_riscv.h
cpu_test.cc
cpu_x64.cc
cpu_x64.h
cpuid.cc
cpuid.h
cpuinfo.h
cpuinfo_android.cc
cpuinfo_fuchsia.cc
cpuinfo_linux.cc
cpuinfo_macos.cc
cpuinfo_test.cc
cpuinfo_win.cc
custom_isolate_test.cc
dart.cc
dart.h
dart_api_impl.cc
dart_api_impl.h [vm/ffi] FfiNative process lookup 2022-10-25 10:57:07 +00:00
dart_api_impl_test.cc [vm/ffi] FfiNative process lookup 2022-10-25 10:57:07 +00:00
dart_api_message.h
dart_api_state.cc
dart_api_state.h
dart_entry.cc
dart_entry.h
datastream.cc
datastream.h
datastream_test.cc
debugger.cc
debugger.h
debugger_api_impl_test.cc
debugger_api_impl_test.h
debugger_arm.cc
debugger_arm64.cc
debugger_ia32.cc
debugger_riscv.cc
debugger_x64.cc
deferred_objects.cc [vm] Allocation sinking of records 2022-10-24 23:00:47 +00:00
deferred_objects.h
deopt_instructions.cc
deopt_instructions.h
dispatch_table.cc
dispatch_table.h
double_conversion.cc
double_conversion.h
double_internals.h
dwarf.cc
dwarf.h
elf.cc
elf.h
exceptions.cc Deprecate FallThroughError. 2022-10-25 12:25:35 +00:00
exceptions.h Deprecate FallThroughError. 2022-10-25 12:25:35 +00:00
exceptions_test.cc
experimental_features.cc
experimental_features.h
ffi_callback_trampolines.cc
ffi_callback_trampolines.h
field_table.cc
field_table.h
finalizable_data.h
fixed_cache.h
fixed_cache_test.cc
flag_list.h Reapply "[vm, gc] Add separate marking verification." 2022-10-20 22:18:07 +00:00
flags.cc
flags.h
flags_test.cc
frame_layout.h
gdb_helpers.cc
globals.h
growable_array.h
growable_array_test.cc
guard_field_test.cc
handle_visitor.h
handles.cc
handles.h
handles_impl.h
handles_test.cc
hash.h
hash_map.h
hash_map_test.cc
hash_table.h
hash_table_test.cc
image_snapshot.cc
image_snapshot.h
instructions.cc
instructions.h
instructions_arm.cc
instructions_arm.h
instructions_arm64.cc
instructions_arm64.h
instructions_arm64_test.cc
instructions_arm_test.cc
instructions_ia32.cc
instructions_ia32.h
instructions_ia32_test.cc
instructions_riscv.cc
instructions_riscv.h
instructions_riscv_test.cc
instructions_x64.cc
instructions_x64.h
instructions_x64_test.cc
intrusive_dlist.h
intrusive_dlist_test.cc
isolate.cc
isolate.h
isolate_reload.cc
isolate_reload.h
isolate_reload_test.cc
isolate_test.cc
json_stream.cc
json_stream.h
json_test.cc
json_writer.cc
json_writer.h
kernel.cc
kernel.h
kernel_binary.cc
kernel_binary.h
kernel_isolate.cc
kernel_isolate.h
kernel_loader.cc
kernel_loader.h
lockers.cc
lockers.h
log.cc
log.h
log_test.cc
longjump.cc
longjump.h
longjump_test.cc
malloc_hooks.h
malloc_hooks_arm.cc
malloc_hooks_arm64.cc
malloc_hooks_ia32.cc
malloc_hooks_riscv.cc
malloc_hooks_tcmalloc.cc
malloc_hooks_test.cc
malloc_hooks_unsupported.cc
malloc_hooks_x64.cc
megamorphic_cache_table.cc
megamorphic_cache_table.h
memory_region.cc
memory_region.h
memory_region_test.cc
message.cc
message.h
message_handler.cc
message_handler.h
message_handler_test.cc
message_snapshot.cc [vm] Fill in ArgumentValue.invalidObject when objects are rejected in isolate messages. 2022-10-24 17:49:29 +00:00
message_snapshot.h
message_test.cc
metrics.cc
metrics.h
metrics_test.cc
mixin_test.cc
native_api_impl.cc
native_arguments.h
native_entry.cc
native_entry.h
native_entry_test.cc
native_entry_test.h
native_function.h
native_message_handler.cc
native_message_handler.h
native_symbol.h
native_symbol_android.cc
native_symbol_fuchsia.cc
native_symbol_linux.cc
native_symbol_macos.cc
native_symbol_win.cc
object.cc [vm] Better implementation of hashCode function. 2022-10-20 20:31:20 +00:00
object.h [vm] Allocation sinking of records 2022-10-24 23:00:47 +00:00
object_arm64_test.cc
object_arm_test.cc
object_graph.cc
object_graph.h
object_graph_copy.cc
object_graph_copy.h
object_graph_test.cc
object_ia32_test.cc
object_id_ring.cc
object_id_ring.h
object_id_ring_test.cc
object_reload.cc
object_riscv_test.cc
object_service.cc
object_set.h
object_store.cc
object_store.h
object_store_test.cc
object_test.cc [vm] Better implementation of hashCode function. 2022-10-20 20:31:20 +00:00
object_x64_test.cc
os.h
os_android.cc
os_fuchsia.cc
os_linux.cc
os_macos.cc
os_test.cc
os_thread.cc
os_thread.h
os_thread_absl.cc
os_thread_absl.h
os_thread_android.cc
os_thread_android.h
os_thread_fuchsia.cc
os_thread_fuchsia.h
os_thread_linux.cc
os_thread_linux.h
os_thread_macos.cc
os_thread_macos.h
os_thread_win.cc
os_thread_win.h
os_win.cc
parser.cc
parser.h
pending_deopts.cc
pending_deopts.h
pointer_tagging.h
port.cc
port.h
port_set.h
port_test.cc
proccpuinfo.cc
proccpuinfo.h
profiler.cc
profiler.h
profiler_service.cc
profiler_service.h
profiler_test.cc
program_visitor.cc
program_visitor.h
random.cc
random.h
raw_object.cc
raw_object.h
raw_object_fields.cc
raw_object_fields.h
regexp.cc
regexp.h
regexp_assembler.cc
regexp_assembler.h
regexp_assembler_bytecode.cc
regexp_assembler_bytecode.h
regexp_assembler_bytecode_inl.h
regexp_assembler_ir.cc
regexp_assembler_ir.h
regexp_ast.cc
regexp_ast.h
regexp_bytecodes.h
regexp_interpreter.cc
regexp_interpreter.h
regexp_parser.cc
regexp_parser.h
regexp_test.cc
report.cc
report.h
resolver.cc
resolver.h
reusable_handles.h
reverse_pc_lookup_cache.cc
reverse_pc_lookup_cache.h
ring_buffer.h
ring_buffer_test.cc
runtime_entry.cc
runtime_entry.h
runtime_entry_arm.cc
runtime_entry_arm64.cc
runtime_entry_ia32.cc
runtime_entry_list.h
runtime_entry_riscv.cc
runtime_entry_x64.cc
scope_timer.h
scopes.cc
scopes.h
scopes_test.cc
service.cc
service.h
service_event.cc
service_event.h
service_isolate.cc
service_isolate.h
service_test.cc
signal_handler.h
signal_handler_android.cc
signal_handler_fuchsia.cc
signal_handler_linux.cc
signal_handler_macos.cc
signal_handler_win.cc
simulator.h
simulator_arm.cc
simulator_arm.h
simulator_arm64.cc
simulator_arm64.h
simulator_riscv.cc
simulator_riscv.h
simulator_x64.cc
simulator_x64.h
snapshot.cc
snapshot.h
snapshot_test.cc
source_report.cc
source_report.h
source_report_test.cc
splay-tree.h
stack_frame.cc
stack_frame.h
stack_frame_arm.h
stack_frame_arm64.h
stack_frame_ia32.h
stack_frame_riscv.h
stack_frame_test.cc
stack_frame_x64.h
stack_trace.cc
stack_trace.h
static_type_exactness_state.h
stub_code.cc
stub_code.h
stub_code_arm64_test.cc
stub_code_arm_test.cc
stub_code_ia32_test.cc
stub_code_list.h
stub_code_riscv_test.cc
stub_code_test.cc
stub_code_x64_test.cc
symbols.cc
symbols.h
tagged_pointer.h
tags.cc
tags.h
thread.cc
thread.h
thread_barrier.h
thread_barrier_test.cc
thread_interrupter.cc
thread_interrupter.h
thread_interrupter_android.cc
thread_interrupter_android_arm.S
thread_interrupter_fuchsia.cc
thread_interrupter_linux.cc
thread_interrupter_macos.cc
thread_interrupter_win.cc
thread_pool.cc
thread_pool.h
thread_pool_test.cc
thread_registry.cc
thread_registry.h
thread_stack_resource.cc
thread_stack_resource.h
thread_state.cc
thread_state.h
thread_test.cc
timeline.cc
timeline.h
timeline_android.cc
timeline_fuchsia.cc
timeline_linux.cc
timeline_macos.cc
timeline_test.cc
timer.cc
timer.h
token.cc
token.h
token_position.cc
token_position.h
type_testing_stubs.cc
type_testing_stubs.h
type_testing_stubs_test.cc
unibrow-inl.h
unibrow.cc
unibrow.h
unicode.cc
unicode_data.cc
unicode_test.cc
unit_test.cc
unit_test.h
uri.cc
uri.h
uri_test.cc
utils_test.cc
v8_snapshot_writer.cc
v8_snapshot_writer.h
version.h
version_in.cc
virtual_memory.cc
virtual_memory.h
virtual_memory_compressed.cc
virtual_memory_compressed.h
virtual_memory_fuchsia.cc
virtual_memory_posix.cc
virtual_memory_test.cc
virtual_memory_win.cc
visitor.cc
visitor.h
vm_sources.gni
zone.cc
zone.h
zone_test.cc
zone_text_buffer.cc
zone_text_buffer.h