Reland "Use nterp cache for fields in switch interpreter."
This reverts commit 6f78517b8de12bac6fc2015ffaaab712347aea59.
Reason for revert: Fix in https://android-review.googlesource.com/c/platform/art/+/2267547.
Change-Id: If33e6d7e7a6852aa36e3b9da96e88c3a5b3f01a8
diff --git a/runtime/interpreter/mterp/nterp.cc b/runtime/interpreter/mterp/nterp.cc
index e58d77d..cb3cf12 100644
--- a/runtime/interpreter/mterp/nterp.cc
+++ b/runtime/interpreter/mterp/nterp.cc
@@ -379,58 +379,9 @@
}
}
-FLATTEN
-static ArtField* ResolveFieldWithAccessChecks(Thread* self,
- ClassLinker* class_linker,
- uint16_t field_index,
- ArtMethod* caller,
- bool is_static,
- bool is_put,
- size_t resolve_field_type) // Resolve if not zero
- REQUIRES_SHARED(Locks::mutator_lock_) {
- if (caller->SkipAccessChecks()) {
- return class_linker->ResolveField(field_index, caller, is_static);
- }
-
- caller = caller->GetInterfaceMethodIfProxy(kRuntimePointerSize);
-
- StackHandleScope<2> hs(self);
- Handle<mirror::DexCache> h_dex_cache(hs.NewHandle(caller->GetDexCache()));
- Handle<mirror::ClassLoader> h_class_loader(hs.NewHandle(caller->GetClassLoader()));
-
- ArtField* resolved_field = class_linker->ResolveFieldJLS(field_index,
- h_dex_cache,
- h_class_loader);
- if (resolved_field == nullptr) {
- return nullptr;
- }
-
- ObjPtr<mirror::Class> fields_class = resolved_field->GetDeclaringClass();
- if (UNLIKELY(resolved_field->IsStatic() != is_static)) {
- ThrowIncompatibleClassChangeErrorField(resolved_field, is_static, caller);
- return nullptr;
- }
- ObjPtr<mirror::Class> referring_class = caller->GetDeclaringClass();
- if (UNLIKELY(!referring_class->CheckResolvedFieldAccess(fields_class,
- resolved_field,
- caller->GetDexCache(),
- field_index))) {
- return nullptr;
- }
- if (UNLIKELY(is_put && !resolved_field->CanBeChangedBy(caller))) {
- ThrowIllegalAccessErrorFinalField(caller, resolved_field);
- return nullptr;
- }
- if (resolve_field_type != 0u && resolved_field->ResolveType() == nullptr) {
- DCHECK(self->IsExceptionPending());
- return nullptr;
- }
- return resolved_field;
-}
-
extern "C" size_t NterpGetStaticField(Thread* self,
ArtMethod* caller,
- uint16_t* dex_pc_ptr,
+ const uint16_t* dex_pc_ptr,
size_t resolve_field_type) // Resolve if not zero
REQUIRES_SHARED(Locks::mutator_lock_) {
UpdateHotness(caller);
@@ -483,7 +434,7 @@
extern "C" uint32_t NterpGetInstanceFieldOffset(Thread* self,
ArtMethod* caller,
- uint16_t* dex_pc_ptr,
+ const uint16_t* dex_pc_ptr,
size_t resolve_field_type) // Resolve if not zero
REQUIRES_SHARED(Locks::mutator_lock_) {
UpdateHotness(caller);