[vm,modular_aot] Initial code generation for static field loads and stores

TEST=ci

Issue: https://github.com/dart-lang/sdk/issues/61635
Change-Id: I07aa7cabf8fe78c0f98c17b98ae85bdc903b99c3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/482920
Reviewed-by: Slava Egorov <vegorov@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
Alexander Markov
2026-02-24 08:54:39 -08:00
committed by Commit Queue
parent 9fba196eea
commit 0ec57dd561
8 changed files with 183 additions and 23 deletions
+10
View File
@@ -96,6 +96,7 @@ class ModuleSnapshot : public AllStatic {
enum ObjectPoolEntryKind {
kObjectRef,
kNewObjectTags,
kStaticFieldOffset,
kInterfaceCall,
};
};
@@ -1172,6 +1173,14 @@ class ObjectPoolDeserializationCluster : public DeserializationCluster {
kCompressedWordSize));
break;
}
case ModuleSnapshot::kStaticFieldOffset: {
FieldPtr field = static_cast<FieldPtr>(d.ReadRef());
pool->untag()->entry_bits()[j] = immediate_entry_bits;
UntaggedObjectPool::Entry& entry = pool->untag()->data()[j];
entry.raw_value_ = FieldTable::FieldOffsetFor(
Smi::Value(field->untag()->host_offset_or_field_id()));
break;
}
case ModuleSnapshot::kInterfaceCall: {
pool->untag()->entry_bits()[j] = tagged_entry_bits;
UntaggedObjectPool::Entry& entry = pool->untag()->data()[j];
@@ -1371,6 +1380,7 @@ void Deserializer::Deserialize() {
AddBaseObject(Object::null_object());
AddBaseObject(Bool::True());
AddBaseObject(Bool::False());
AddBaseObject(Object::sentinel());
AddBaseObject(Object::dynamic_type());
AddBaseObject(Object::void_type());
AddBaseObject(Type::Handle(zone(), object_store->null_type()));