Fix JNI compiler for synchronized methods.
Calls to the monitor enter/exit routines were passing the JNI env with
the iterator in the wrong position. Reset the iterator to make sure it
is in the correct position for the monitor enter/exit call.
Also fix clobbering of arguments in registers when calling monitor enter
for synchronized methods on ARM.
Also some tidying of code/comments.
Change-Id: I5bf1dd7e65d925e768411cb5865919ee5f54edbf
diff --git a/src/assembler_arm.h b/src/assembler_arm.h
index f82107c..99ff9fe 100644
--- a/src/assembler_arm.h
+++ b/src/assembler_arm.h
@@ -8,6 +8,7 @@
#include "logging.h"
#include "offsets.h"
#include "utils.h"
+#include <vector>
namespace art {
@@ -409,10 +410,16 @@
static bool IsInstructionForExceptionHandling(uword pc);
// Emit code that will create an activation on the stack
- void BuildFrame(size_t frame_size, ManagedRegister method_reg);
+ void BuildFrame(size_t frame_size, ManagedRegister method_reg,
+ const std::vector<ManagedRegister>& spill_regs);
// Emit code that will remove an activation from the stack
- void RemoveFrame(size_t frame_size);
+ void RemoveFrame(size_t frame_size,
+ const std::vector<ManagedRegister>& spill_regs);
+
+ // Fill registers from spill area, excluding R0 (Method*) and LR
+ void FillFromSpillArea(const std::vector<ManagedRegister>& spill_regs,
+ size_t displacement);
void IncreaseFrameSize(size_t adjust);
void DecreaseFrameSize(size_t adjust);