Inline ResolveMethod and ResolveField in nterp
They are on very hot path (field and method opcodes).
This makes up startup ~1% faster with interpreter.
The methods are fairly big and spill most registers,
but the DexCache-hit fastpath requires no spills.
Rather than refactoring the methods, it is easier
to just inline them, since the caller already spills.
Test: test.py -b --host
Change-Id: I60221e3aa819378ed2f353044cfdfe6cbc51237d
diff --git a/runtime/interpreter/mterp/nterp.cc b/runtime/interpreter/mterp/nterp.cc
index ddef31d..fd57ece 100644
--- a/runtime/interpreter/mterp/nterp.cc
+++ b/runtime/interpreter/mterp/nterp.cc
@@ -20,6 +20,7 @@
#include "nterp.h"
#include "base/quasi_atomic.h"
+#include "class_linker-inl.h"
#include "dex/dex_instruction_utils.h"
#include "debugger.h"
#include "entrypoints/entrypoint_utils-inl.h"
@@ -264,6 +265,7 @@
return dex_file->GetShorty(proto_idx);
}
+FLATTEN
extern "C" size_t NterpGetMethod(Thread* self, ArtMethod* caller, uint16_t* dex_pc_ptr)
REQUIRES_SHARED(Locks::mutator_lock_) {
UpdateHotness(caller);
@@ -422,6 +424,7 @@
}
}
+FLATTEN
static ArtField* ResolveFieldWithAccessChecks(Thread* self,
ClassLinker* class_linker,
uint16_t field_index,