From 0cd81352a7c06e381951cea1b104fd73516f4341 Mon Sep 17 00:00:00 2001 From: Mathieu Chartier Date: Thu, 22 May 2014 16:48:55 -0700 Subject: Revert "Revert "Fix an outstanding compaction bug in interpreter."" Fixed the generic trampoline to not use ToJObject when unnecessary. Bug: 15167269 This reverts commit 3bdb873122964da7937eb070cbcf2ef638a8e459. Change-Id: I0525d0e0f3afb753c770e1572070a0fa22b02271 --- compiler/driver/compiler_driver-inl.h | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'compiler/driver/compiler_driver-inl.h') diff --git a/compiler/driver/compiler_driver-inl.h b/compiler/driver/compiler_driver-inl.h index 08fd386226..45abfcc895 100644 --- a/compiler/driver/compiler_driver-inl.h +++ b/compiler/driver/compiler_driver-inl.h @@ -42,8 +42,8 @@ inline mirror::ClassLoader* CompilerDriver::GetClassLoader(ScopedObjectAccess& s } inline mirror::Class* CompilerDriver::ResolveCompilingMethodsClass( - ScopedObjectAccess& soa, const Handle& dex_cache, - const Handle& class_loader, const DexCompilationUnit* mUnit) { + ScopedObjectAccess& soa, Handle dex_cache, + Handle class_loader, const DexCompilationUnit* mUnit) { DCHECK_EQ(dex_cache->GetDexFile(), mUnit->GetDexFile()); DCHECK_EQ(class_loader.Get(), soa.Decode(mUnit->GetClassLoader())); const DexFile::MethodId& referrer_method_id = @@ -59,8 +59,8 @@ inline mirror::Class* CompilerDriver::ResolveCompilingMethodsClass( } inline mirror::ArtField* CompilerDriver::ResolveField( - ScopedObjectAccess& soa, const Handle& dex_cache, - const Handle& class_loader, const DexCompilationUnit* mUnit, + ScopedObjectAccess& soa, Handle dex_cache, + Handle class_loader, const DexCompilationUnit* mUnit, uint32_t field_idx, bool is_static) { DCHECK_EQ(dex_cache->GetDexFile(), mUnit->GetDexFile()); DCHECK_EQ(class_loader.Get(), soa.Decode(mUnit->GetClassLoader())); @@ -165,13 +165,14 @@ inline std::pair CompilerDriver::IsFastStaticField( } inline mirror::ArtMethod* CompilerDriver::ResolveMethod( - ScopedObjectAccess& soa, const Handle& dex_cache, - const Handle& class_loader, const DexCompilationUnit* mUnit, + ScopedObjectAccess& soa, Handle dex_cache, + Handle class_loader, const DexCompilationUnit* mUnit, uint32_t method_idx, InvokeType invoke_type) { - DCHECK(dex_cache->GetDexFile() == mUnit->GetDexFile()); - DCHECK(class_loader.Get() == soa.Decode(mUnit->GetClassLoader())); + DCHECK_EQ(dex_cache->GetDexFile(), mUnit->GetDexFile()); + DCHECK_EQ(class_loader.Get(), soa.Decode(mUnit->GetClassLoader())); mirror::ArtMethod* resolved_method = mUnit->GetClassLinker()->ResolveMethod( - *mUnit->GetDexFile(), method_idx, dex_cache, class_loader, nullptr, invoke_type); + *mUnit->GetDexFile(), method_idx, dex_cache, class_loader, NullHandle(), + invoke_type); DCHECK_EQ(resolved_method == nullptr, soa.Self()->IsExceptionPending()); if (UNLIKELY(resolved_method == nullptr)) { // Clean up any exception left by type resolution. @@ -206,8 +207,8 @@ inline uint16_t CompilerDriver::GetResolvedMethodVTableIndex( } inline int CompilerDriver::IsFastInvoke( - ScopedObjectAccess& soa, const Handle& dex_cache, - const Handle& class_loader, const DexCompilationUnit* mUnit, + ScopedObjectAccess& soa, Handle dex_cache, + Handle class_loader, const DexCompilationUnit* mUnit, mirror::Class* referrer_class, mirror::ArtMethod* resolved_method, InvokeType* invoke_type, MethodReference* target_method, const MethodReference* devirt_target, uintptr_t* direct_code, uintptr_t* direct_method) { @@ -256,15 +257,17 @@ inline int CompilerDriver::IsFastInvoke( ClassLinker* class_linker = mUnit->GetClassLinker(); if (LIKELY(devirt_target->dex_file == mUnit->GetDexFile())) { called_method = class_linker->ResolveMethod(*devirt_target->dex_file, - devirt_target->dex_method_index, - dex_cache, class_loader, NULL, kVirtual); + devirt_target->dex_method_index, dex_cache, + class_loader, NullHandle(), + kVirtual); } else { StackHandleScope<1> hs(soa.Self()); Handle target_dex_cache( hs.NewHandle(class_linker->FindDexCache(*devirt_target->dex_file))); called_method = class_linker->ResolveMethod(*devirt_target->dex_file, devirt_target->dex_method_index, - target_dex_cache, class_loader, NULL, kVirtual); + target_dex_cache, class_loader, + NullHandle(), kVirtual); } CHECK(called_method != NULL); CHECK(!called_method->IsAbstract()); -- cgit v1.2.3-59-g8ed1b