Decoding references. Otherwise, buggy code works only on stack refs.
Now, we handle not only SIRT (stack stuff), but because now we call
DecodeJObject(), we can also handle Globals, Global Weak, and Local.
Change-Id: Ibaf2f6ff81765bda6c14491b35ea088a5bf2bb27
diff --git a/src/assembler_arm.cc b/src/assembler_arm.cc
index e613307..472d000 100644
--- a/src/assembler_arm.cc
+++ b/src/assembler_arm.cc
@@ -1694,6 +1694,23 @@
// TODO: place reference map on call
}
+void Assembler::Call(uintptr_t addr,
+ ManagedRegister scratch) {
+ CHECK(scratch.IsCoreRegister());
+ CHECK(sizeof(uintptr_t) == sizeof(int32_t));
+ LoadImmediate(scratch.AsCoreRegister(), static_cast<int32_t>(addr));
+ blx(scratch.AsCoreRegister());
+ // TODO: place reference map on call
+}
+
+void Assembler::GetCurrentThread(ManagedRegister tr) {
+ mov(tr.AsCoreRegister(), ShifterOperand(TR));
+}
+
+void Assembler::GetCurrentThread(FrameOffset offset, ManagedRegister scratch) {
+ StoreToOffset(kStoreWord, TR, SP, offset.Int32Value(), AL);
+}
+
void Assembler::SuspendPoll(ManagedRegister scratch, ManagedRegister return_reg,
FrameOffset return_save_location,
size_t return_size) {