From: Andreas Gampe Date: Sat, 8 Aug 2015 00:20:11 +0000 (-0700) Subject: ART: Clean up unnecessary ArtMethod** X-Git-Tag: android-x86-7.1-r1~889^2~599^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=3a35714ebca10c989aa383c0861e2e84fe8dadf8;p=android-x86%2Fart.git ART: Clean up unnecessary ArtMethod** ArtMethods are no longer Java objects, so the additional indirection is no longer necessary here. Change-Id: If76756d875b418b3f6e83f51b3225a158e9ce29b --- diff --git a/runtime/entrypoints/entrypoint_utils-inl.h b/runtime/entrypoints/entrypoint_utils-inl.h index 3e15cc544..66e88ba88 100644 --- a/runtime/entrypoints/entrypoint_utils-inl.h +++ b/runtime/entrypoints/entrypoint_utils-inl.h @@ -426,15 +426,15 @@ EXPLICIT_FIND_FIELD_FROM_CODE_TYPED_TEMPLATE_DECL(StaticPrimitiveWrite); template inline ArtMethod* FindMethodFromCode(uint32_t method_idx, mirror::Object** this_object, - ArtMethod** referrer, Thread* self) { + ArtMethod* referrer, Thread* self) { ClassLinker* const class_linker = Runtime::Current()->GetClassLinker(); - ArtMethod* resolved_method = class_linker->GetResolvedMethod(method_idx, *referrer); + ArtMethod* resolved_method = class_linker->GetResolvedMethod(method_idx, referrer); if (resolved_method == nullptr) { StackHandleScope<1> hs(self); mirror::Object* null_this = nullptr; HandleWrapper h_this( hs.NewHandleWrapper(type == kStatic ? &null_this : this_object)); - resolved_method = class_linker->ResolveMethod(self, method_idx, *referrer, type); + resolved_method = class_linker->ResolveMethod(self, method_idx, referrer, type); } if (UNLIKELY(resolved_method == nullptr)) { DCHECK(self->IsExceptionPending()); // Throw exception and unwind. @@ -448,11 +448,11 @@ inline ArtMethod* FindMethodFromCode(uint32_t method_idx, mirror::Object** this_ // Incompatible class change should have been handled in resolve method. if (UNLIKELY(resolved_method->CheckIncompatibleClassChange(type))) { ThrowIncompatibleClassChangeError(type, resolved_method->GetInvokeType(), resolved_method, - *referrer); + referrer); return nullptr; // Failure. } mirror::Class* methods_class = resolved_method->GetDeclaringClass(); - mirror::Class* referring_class = (*referrer)->GetDeclaringClass(); + mirror::Class* referring_class = referrer->GetDeclaringClass(); bool can_access_resolved_method = referring_class->CheckResolvedMethodAccess(methods_class, resolved_method, method_idx); @@ -480,7 +480,7 @@ inline ArtMethod* FindMethodFromCode(uint32_t method_idx, mirror::Object** this_ return klass->GetVTableEntry(vtable_index, class_linker->GetImagePointerSize()); } case kSuper: { - mirror::Class* super_class = (*referrer)->GetDeclaringClass()->GetSuperClass(); + mirror::Class* super_class = referrer->GetDeclaringClass()->GetSuperClass(); uint16_t vtable_index = resolved_method->GetMethodIndex(); if (access_check) { // Check existence of super class. @@ -517,7 +517,7 @@ inline ArtMethod* FindMethodFromCode(uint32_t method_idx, mirror::Object** this_ resolved_method, class_linker->GetImagePointerSize()); if (UNLIKELY(interface_method == nullptr)) { ThrowIncompatibleClassChangeErrorClassForInterfaceDispatch(resolved_method, - *this_object, *referrer); + *this_object, referrer); return nullptr; // Failure. } return interface_method; @@ -534,7 +534,7 @@ inline ArtMethod* FindMethodFromCode(uint32_t method_idx, mirror::Object** this_ template SHARED_REQUIRES(Locks::mutator_lock_) ALWAYS_INLINE \ ArtMethod* FindMethodFromCode<_type, _access_check>(uint32_t method_idx, \ mirror::Object** this_object, \ - ArtMethod** referrer, \ + ArtMethod* referrer, \ Thread* self) #define EXPLICIT_FIND_METHOD_FROM_CODE_TYPED_TEMPLATE_DECL(_type) \ EXPLICIT_FIND_METHOD_FROM_CODE_TEMPLATE_DECL(_type, false); \ diff --git a/runtime/entrypoints/entrypoint_utils.h b/runtime/entrypoints/entrypoint_utils.h index dc04c0ac9..53f2677e7 100644 --- a/runtime/entrypoints/entrypoint_utils.h +++ b/runtime/entrypoints/entrypoint_utils.h @@ -138,7 +138,7 @@ inline ArtField* FindFieldFromCode( template inline ArtMethod* FindMethodFromCode( - uint32_t method_idx, mirror::Object** this_object, ArtMethod** referrer, Thread* self) + uint32_t method_idx, mirror::Object** this_object, ArtMethod* referrer, Thread* self) SHARED_REQUIRES(Locks::mutator_lock_); // Fast path field resolution that can't initialize classes or throw exceptions. diff --git a/runtime/entrypoints/quick/quick_trampoline_entrypoints.cc b/runtime/entrypoints/quick/quick_trampoline_entrypoints.cc index 6fe2bb61e..da4b82c43 100644 --- a/runtime/entrypoints/quick/quick_trampoline_entrypoints.cc +++ b/runtime/entrypoints/quick/quick_trampoline_entrypoints.cc @@ -1989,7 +1989,7 @@ static TwoWordReturn artInvokeCommon(uint32_t method_idx, mirror::Object* this_o ScopedObjectAccessUnchecked soa(self->GetJniEnv()); RememberForGcArgumentVisitor visitor(sp, type == kStatic, shorty, shorty_len, &soa); visitor.VisitArguments(); - method = FindMethodFromCode(method_idx, &this_object, &caller_method, + method = FindMethodFromCode(method_idx, &this_object, caller_method, self); visitor.FixupReferences(); } @@ -2112,7 +2112,7 @@ extern "C" TwoWordReturn artInvokeInterfaceTrampoline(uint32_t dex_method_idx, ScopedObjectAccessUnchecked soa(self->GetJniEnv()); RememberForGcArgumentVisitor visitor(sp, false, shorty, shorty_len, &soa); visitor.VisitArguments(); - method = FindMethodFromCode(dex_method_idx, &this_object, &caller_method, + method = FindMethodFromCode(dex_method_idx, &this_object, caller_method, self); visitor.FixupReferences(); } diff --git a/runtime/interpreter/interpreter_common.h b/runtime/interpreter/interpreter_common.h index 2486a983f..6468659d9 100644 --- a/runtime/interpreter/interpreter_common.h +++ b/runtime/interpreter/interpreter_common.h @@ -169,7 +169,7 @@ static inline bool DoCreateLambda(Thread* self, ShadowFrame& shadow_frame, mirror::Object* receiver = nullptr; // Always static. (see 'kStatic') ArtMethod* sf_method = shadow_frame.GetMethod(); ArtMethod* const called_method = FindMethodFromCode( - method_idx, &receiver, &sf_method, self); + method_idx, &receiver, sf_method, self); uint32_t vregA = inst->VRegA_21c(); @@ -254,7 +254,7 @@ static inline bool DoInvoke(Thread* self, ShadowFrame& shadow_frame, const Instr Object* receiver = (type == kStatic) ? nullptr : shadow_frame.GetVRegReference(vregC); ArtMethod* sf_method = shadow_frame.GetMethod(); ArtMethod* const called_method = FindMethodFromCode( - method_idx, &receiver, &sf_method, self); + method_idx, &receiver, sf_method, self); // The shadow frame should already be pushed, so we don't need to update it. if (UNLIKELY(called_method == nullptr)) { CHECK(self->IsExceptionPending());