[vm/ffi] Add a slot for RawPointer::address.
Change-Id: I55f803264ecf8555ffacbd42ec01c7581d335c93
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/94750
Commit-Queue: Samir Jindel <sjindel@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 4dbdd20..88fee20 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -2580,6 +2580,7 @@
case Slot::Kind::kClosure_hash:
case Slot::Kind::kCapturedVariable:
case Slot::Kind::kDartField:
+ case Slot::Kind::kPointer_c_memory_address:
return false;
}
UNREACHABLE();
diff --git a/runtime/vm/compiler/backend/locations.h b/runtime/vm/compiler/backend/locations.h
index 9c76dd6..b88b9d5 100644
--- a/runtime/vm/compiler/backend/locations.h
+++ b/runtime/vm/compiler/backend/locations.h
@@ -33,6 +33,9 @@
kNumRepresentations
};
+static constexpr Representation kUnboxedIntPtr =
+ compiler::target::kWordSize == 4 ? kUnboxedInt32 : kUnboxedInt64;
+
// Location objects are used to connect register allocator and code generator.
// Instruction templates used by code generator have a corresponding
// LocationSummary object which specifies expected location for every input
diff --git a/runtime/vm/compiler/backend/range_analysis.cc b/runtime/vm/compiler/backend/range_analysis.cc
index e0f096b..85757192 100644
--- a/runtime/vm/compiler/backend/range_analysis.cc
+++ b/runtime/vm/compiler/backend/range_analysis.cc
@@ -2630,6 +2630,7 @@
case Slot::Kind::kClosure_function:
case Slot::Kind::kClosure_function_type_arguments:
case Slot::Kind::kClosure_instantiator_type_arguments:
+ case Slot::Kind::kPointer_c_memory_address:
// Not an integer valued field.
UNREACHABLE();
break;
diff --git a/runtime/vm/compiler/backend/slot.h b/runtime/vm/compiler/backend/slot.h
index d448e40..2a45084 100644
--- a/runtime/vm/compiler/backend/slot.h
+++ b/runtime/vm/compiler/backend/slot.h
@@ -67,7 +67,8 @@
V(LinkedHashMap, deleted_keys, Smi, VAR) \
V(ArgumentsDescriptor, type_args_len, Smi, FINAL) \
V(ArgumentsDescriptor, positional_count, Smi, FINAL) \
- V(ArgumentsDescriptor, count, Smi, FINAL)
+ V(ArgumentsDescriptor, count, Smi, FINAL) \
+ V(Pointer, c_memory_address, Integer, FINAL)
// Slot is an abstraction that describes an readable (and possibly writeable)
// location within an object.