summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/interpreter/mterp/nterp.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/runtime/interpreter/mterp/nterp.cc b/runtime/interpreter/mterp/nterp.cc
index d51b0ae0bc..b025e3d4d7 100644
--- a/runtime/interpreter/mterp/nterp.cc
+++ b/runtime/interpreter/mterp/nterp.cc
@@ -482,7 +482,7 @@ extern "C" void NterpUnimplemented() {
static mirror::Object* DoFilledNewArray(Thread* self,
ArtMethod* caller,
uint16_t* dex_pc_ptr,
- int32_t* regs,
+ uint32_t* regs,
bool is_range)
REQUIRES_SHARED(Locks::mutator_lock_) {
const Instruction* inst = Instruction::At(dex_pc_ptr);
@@ -555,7 +555,7 @@ static mirror::Object* DoFilledNewArray(Thread* self,
extern "C" mirror::Object* NterpFilledNewArray(Thread* self,
ArtMethod* caller,
- int32_t* registers,
+ uint32_t* registers,
uint16_t* dex_pc_ptr)
REQUIRES_SHARED(Locks::mutator_lock_) {
return DoFilledNewArray(self, caller, dex_pc_ptr, registers, /* is_range= */ false);
@@ -563,7 +563,7 @@ extern "C" mirror::Object* NterpFilledNewArray(Thread* self,
extern "C" mirror::Object* NterpFilledNewArrayRange(Thread* self,
ArtMethod* caller,
- int32_t* registers,
+ uint32_t* registers,
uint16_t* dex_pc_ptr)
REQUIRES_SHARED(Locks::mutator_lock_) {
return DoFilledNewArray(self, caller, dex_pc_ptr, registers, /* is_range= */ true);
@@ -573,7 +573,7 @@ extern "C" jit::OsrData* NterpHotMethod(ArtMethod* method, uint16_t* dex_pc_ptr,
REQUIRES_SHARED(Locks::mutator_lock_) {
ScopedAssertNoThreadSuspension sants("In nterp");
jit::Jit* jit = Runtime::Current()->GetJit();
- if (jit != nullptr) {
+ if (jit != nullptr && jit->UseJitCompilation()) {
// Nterp passes null on entry where we don't want to OSR.
if (dex_pc_ptr != nullptr) {
// This could be a loop back edge, check if we can OSR.
@@ -593,12 +593,14 @@ extern "C" jit::OsrData* NterpHotMethod(ArtMethod* method, uint16_t* dex_pc_ptr,
extern "C" ssize_t MterpDoPackedSwitch(const uint16_t* switchData, int32_t testVal);
extern "C" ssize_t NterpDoPackedSwitch(const uint16_t* switchData, int32_t testVal)
REQUIRES_SHARED(Locks::mutator_lock_) {
+ ScopedAssertNoThreadSuspension sants("In nterp");
return MterpDoPackedSwitch(switchData, testVal);
}
extern "C" ssize_t MterpDoSparseSwitch(const uint16_t* switchData, int32_t testVal);
extern "C" ssize_t NterpDoSparseSwitch(const uint16_t* switchData, int32_t testVal)
REQUIRES_SHARED(Locks::mutator_lock_) {
+ ScopedAssertNoThreadSuspension sants("In nterp");
return MterpDoSparseSwitch(switchData, testVal);
}