summaryrefslogtreecommitdiff
path: root/src/assembler_arm.h
diff options
context:
space:
mode:
author Ian Rogers <irogers@google.com> 2011-07-21 22:00:15 -0700
committer Ian Rogers <irogers@google.com> 2011-07-22 15:16:43 -0700
commit45a76cb99104a222d6a9bd768a084893dcb7cf30 (patch)
tree995557ba95942309ffe9c4a13819a10da8c4b4bb /src/assembler_arm.h
parent69759eaa6fd4386f1e6d8748052ad221087b3476 (diff)
Exception and suspend count polling on JNI bridge return.
Change-Id: I0e5597fcbdcdb88100b18d63323e7ba8d27f13fe
Diffstat (limited to 'src/assembler_arm.h')
-rw-r--r--src/assembler_arm.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/assembler_arm.h b/src/assembler_arm.h
index 3981f4a76c..acaf870a58 100644
--- a/src/assembler_arm.h
+++ b/src/assembler_arm.h
@@ -446,6 +446,7 @@ class Assembler {
void StoreStackOffsetToThread(ThreadOffset thr_offs, FrameOffset fr_offs,
ManagedRegister scratch);
+ void StoreStackPointerToThread(ThreadOffset thr_offs);
void Move(ManagedRegister dest, ManagedRegister src);
void Copy(FrameOffset dest, FrameOffset src, ManagedRegister scratch,
@@ -464,12 +465,24 @@ class Assembler {
void Call(ManagedRegister base, Offset offset, ManagedRegister scratch);
+ // Generate code to check if Thread::Current()->suspend_count_ is non-zero
+ // and branch to a SuspendSlowPath if it is. The SuspendSlowPath will continue
+ // at the next instruction.
+ void SuspendPoll(ManagedRegister scratch, ManagedRegister return_reg,
+ FrameOffset return_save_location, size_t return_size);
+
+ // Generate code to check if Thread::Current()->exception_ is non-null
+ // and branch to a ExceptionSlowPath if it is.
+ void ExceptionPoll(ManagedRegister scratch);
+
// Emit data (e.g. encoded instruction or immediate) to the
// instruction stream.
void Emit(int32_t value);
void Bind(Label* label);
+ void EmitSlowPaths() { buffer_.EmitSlowPaths(this); }
+
size_t CodeSize() const { return buffer_.Size(); }
void FinalizeInstructions(const MemoryRegion& region) {