[vm, compiler] Fix LoadFieldInstr(Acquire) with compressed pointers.
TEST=ci
Cq-Include-Trybots: luci.dart.try:vm-aot-android-release-arm64c-try,vm-linux-debug-x64c-try
Change-Id: I454f5f3b1bcf94474d16f5384c6cbe4b8200870e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442706
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
diff --git a/runtime/vm/compiler/assembler/assembler_base.cc b/runtime/vm/compiler/assembler/assembler_base.cc
index 0572fed..bc9f9a6 100644
--- a/runtime/vm/compiler/assembler/assembler_base.cc
+++ b/runtime/vm/compiler/assembler/assembler_base.cc
@@ -60,7 +60,7 @@
} else {
if (slot.is_compressed()) {
if (memory_order == kAcquire) {
- LoadAcquireCompressedFromOffset(dst, base, slot.offset_in_bytes());
+ LoadAcquireCompressedFieldFromOffset(dst, base, slot.offset_in_bytes());
} else {
LoadCompressedFieldFromOffset(dst, base, slot.offset_in_bytes());
}
@@ -186,6 +186,11 @@
int32_t offset) {
LoadAcquireCompressed(dst, Address(base, offset));
}
+void AssemblerBase::LoadAcquireCompressedFieldFromOffset(Register dst,
+ Register base,
+ int32_t offset) {
+ LoadAcquireCompressed(dst, FieldAddress(base, offset));
+}
void AssemblerBase::LoadCompressedField(Register dst,
const FieldAddress& address) {
LoadCompressed(dst, address);
diff --git a/runtime/vm/compiler/assembler/assembler_base.h b/runtime/vm/compiler/assembler/assembler_base.h
index 9fb39cb..ce77b10 100644
--- a/runtime/vm/compiler/assembler/assembler_base.h
+++ b/runtime/vm/compiler/assembler/assembler_base.h
@@ -1060,6 +1060,9 @@
void LoadAcquireCompressedFromOffset(Register dst,
Register base,
int32_t offset);
+ void LoadAcquireCompressedFieldFromOffset(Register dst,
+ Register base,
+ int32_t offset);
void LoadCompressedField(Register dst, const FieldAddress& address);
void LoadCompressedFromOffset(Register dst, Register base, int32_t offset);
void LoadCompressedFieldFromOffset(Register dst,