671f271f58
Add OperandSize arguments to the non-compressed Store methods so that the compressed Store methods can be implemented as calls to the corresponding non-compressed method using kObjectBytes. This makes it so that all compressed Store methods are now non-virtual. Add a scratch register argument to all Store methods that involve a write barrier that defaults to TMP. Originally only the IA32 implementation took a scratch register, with the others using TMP or TMP2 internally. Since all architectures can represent a register/offset pair as an Address without losing information, make all the offset-based load and store methods have an implementation that creates an Address or FieldAddress and calls the corresponding address-based store method. This makes all the offset-based load and store methods non-virtual. After this, most of the Store methods are non-virtual, with only the base methods used to implement them as virtual: * Store * StoreRelease * StoreObjectIntoObjectNoBarrier * StoreBarrier * ArrayStoreBarrier * VerifyStoreNeedsNoWriteBarrier (for DEBUG use only) The Load methods can't be consolidated quite so much, as the base methods for handling non-Smi compressed pointers must be defined per-architecture, as each compressed pointer architecture handles adding the upper bits for the heap separately. Have LoadFieldInstr::EmitNativeCode use Assembler::LoadToSlot when the result location is a single integer register and StoreFieldInstr::EmitNativeCode use Assembler::StoreToSlot and Assembler::StoreToSlotNoBarrier when the value location is a single integer register to avoid code duplication between those methods. Handle both compressed and uncompressed Smi fields in LoadFromSlot. TEST=ci (refactoring) Cq-Include-Trybots: luci.dart.try:vm-aot-android-release-arm64c-try,vm-aot-linux-debug-x64-try,vm-aot-linux-debug-x64c-try,vm-aot-mac-release-arm64-try,vm-aot-mac-release-x64-try,vm-aot-obfuscate-linux-release-x64-try,vm-aot-optimization-level-linux-release-x64-try,vm-aot-win-debug-arm64-try,vm-appjit-linux-debug-x64-try,vm-asan-linux-release-x64-try,vm-checked-mac-release-arm64-try,vm-eager-optimization-linux-release-ia32-try,vm-eager-optimization-linux-release-x64-try,vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64c-try,vm-ffi-qemu-linux-release-arm-try,vm-ffi-qemu-linux-release-riscv64-try,vm-linux-debug-ia32-try,vm-linux-debug-x64c-try,vm-mac-debug-arm64-try,vm-mac-debug-x64-try,vm-msan-linux-release-x64-try,vm-reload-linux-debug-x64-try,vm-reload-rollback-linux-debug-x64-try,vm-ubsan-linux-release-x64-try,vm-win-debug-x64-try,vm-win-release-ia32-try Change-Id: I60cc03776af220ed87918664bb4b9abafff2788a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/360641 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com> Reviewed-by: Daco Harkes <dacoharkes@google.com>