diff --git a/src/asm_support.h b/src/asm_support.h
index 19a930d..f81966f 100644
--- a/src/asm_support.h
+++ b/src/asm_support.h
@@ -3,11 +3,12 @@
 #ifndef ART_SRC_ASM_SUPPORT_H_
 #define ART_SRC_ASM_SUPPORT_H_
 
+#define SUSPEND_CHECK_INTERVAL (1000)
+
 #if defined(__arm__)
 #define rSUSPEND r4
 #define rSELF r9
 #define rLR r14
-#define SUSPEND_CHECK_INTERVAL (1000)
 // Offset of field Thread::suspend_count_ verified in InitCpu
 #define THREAD_SUSPEND_COUNT_OFFSET 388
 // Offset of field Thread::suspend_count_ verified in InitCpu
diff --git a/src/jni_internal_arm.cc b/src/jni_internal_arm.cc
index ba13de7..93380b1 100644
--- a/src/jni_internal_arm.cc
+++ b/src/jni_internal_arm.cc
@@ -4,6 +4,7 @@
 
 #include <algorithm>
 
+#include "asm_support.h"
 #include "assembler.h"
 #include "compiled_method.h"
 #include "object.h"
@@ -45,6 +46,9 @@
   // Move the managed thread pointer into R9.
   __ mov(R9, ShifterOperand(R2));
 
+  // Reset R4 to suspend check intercal
+  __ LoadImmediate(R4, SUSPEND_CHECK_INTERVAL);
+
   // Move frame down for arguments less 3 pushed values above
   __ AddConstant(SP, -frame_size + (3 * kPointerSize));
 
diff --git a/src/runtime_support.cc b/src/runtime_support.cc
index db6cbf0..c7a04ec 100644
--- a/src/runtime_support.cc
+++ b/src/runtime_support.cc
@@ -685,11 +685,13 @@
   DCHECK(!thread->IsExceptionPending());
 }
 
-extern "C" void artCheckSuspendFromJni(Thread* thread) {
+void CheckSuspendFromCode(Thread* thread) {
+  // Called when thread->suspend_count_ != 0
   Runtime::Current()->GetThreadList()->FullSuspendCheck(thread);
 }
 
-extern "C" void artCheckSuspendFromCode(Thread* thread, Method** sp) {
+extern "C" void artTestSuspendFromCode(Thread* thread, Method** sp) {
+  // Called when suspend count check value is 0 and thread->suspend_count_ != 0
   FinishCalleeSaveFrameSetup(thread, sp, Runtime::kRefsOnly);
   Runtime::Current()->GetThreadList()->FullSuspendCheck(thread);
 }
diff --git a/src/runtime_support.h b/src/runtime_support.h
index d05ece0..2d34f9b 100644
--- a/src/runtime_support.h
+++ b/src/runtime_support.h
@@ -10,6 +10,7 @@
 
 namespace art {
 
+extern void CheckSuspendFromCode(Thread* thread);
 extern Array* CheckAndAllocArrayFromCode(uint32_t type_idx, Method* method, int32_t component_count,
                                          Thread* self);
 extern void DebugMe(Method* method, uint32_t info);
@@ -22,7 +23,6 @@
 extern Class* InitializeTypeFromCode(uint32_t type_idx, Method* method);
 extern void ResolveMethodFromCode(Method* method, uint32_t method_idx);
 extern void LockObjectFromCode(Thread* thread, Object* obj);
-extern "C" void artCheckSuspendFromJni(Thread* thread);
 extern int64_t D2L(double d);
 extern int64_t F2L(float f);
 
diff --git a/src/runtime_support_asm.S b/src/runtime_support_asm.S
index d86d1fb..4727fcf 100644
--- a/src/runtime_support_asm.S
+++ b/src/runtime_support_asm.S
@@ -421,7 +421,7 @@
     DELIVER_PENDING_EXCEPTION
 
     .global art_test_suspend
-    .extern artCheckSuspendFromCode
+    .extern artTestSuspendFromCode
 art_test_suspend:
     ldr    r0, [rSELF, #THREAD_SUSPEND_COUNT_OFFSET]
     mov    rSUSPEND, #SUSPEND_CHECK_INTERVAL  @ reset rSUSPEND to SUSPEND_CHECK_INTERVAL
@@ -430,7 +430,7 @@
     mov    r0, rSELF
     mov    r1, sp
     SETUP_REF_ONLY_CALLEE_SAVE_FRAME          @ save callee saves for stack crawl
-    bl     artCheckSuspendFromCode            @ (Thread*, SP)
+    bl     artTestSuspendFromCode             @ (Thread*, SP)
     RESTORE_REF_ONLY_CALLEE_SAVE_FRAME_AND_RETURN
 
     .global art_shl_long
diff --git a/src/thread.cc b/src/thread.cc
index 079954b..9f7fc20 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -105,6 +105,7 @@
   pFmod = fmod;
   pLdivmod = __aeabi_ldivmod;
   pLmul = __aeabi_lmul;
+  pTestSuspendFromCode = art_test_suspend;
   pAllocObjectFromCode = art_alloc_object_from_code;
   pAllocArrayFromCode = art_alloc_array_from_code;
   pCanPutArrayElementFromCode = art_can_put_array_element_from_code;
@@ -120,7 +121,6 @@
   pSet32Static = art_set32_static_from_code;
   pSet64Static = art_set64_static_from_code;
   pSetObjStatic = art_set_obj_static_from_code;
-  pTestSuspendFromCode = art_test_suspend;
   pThrowArrayBoundsFromCode = art_throw_array_bounds_from_code;
   pThrowDivZeroFromCode = art_throw_div_zero_from_code;
   pThrowNegArraySizeFromCode = art_throw_neg_array_size_from_code;
@@ -131,21 +131,21 @@
   pLockObjectFromCode = art_lock_object_from_code;
   pUnlockObjectFromCode = art_unlock_object_from_code;
 #endif
-  pDeliverException = art_deliver_exception_from_code;
-  pThrowAbstractMethodErrorFromCode = ThrowAbstractMethodErrorFromCode;
-  pUnresolvedDirectMethodTrampolineFromCode = UnresolvedDirectMethodTrampolineFromCode;
   pF2l = F2L;
   pD2l = D2L;
   pMemcpy = memcpy;
-  pInitializeTypeFromCode = InitializeTypeFromCode;
-  pResolveMethodFromCode = ResolveMethodFromCode;
-  pInstanceofNonTrivialFromCode = Class::IsAssignableFromCode;
-  pCheckSuspendFromCode = artCheckSuspendFromJni;
-  pFindNativeMethod = FindNativeMethod;
-  pDecodeJObjectInThread = DecodeJObjectInThread;
-  pResolveStringFromCode = ResolveStringFromCode;
-  pObjectInit = ObjectInitFromCode;
+  pCheckSuspendFromCode = CheckSuspendFromCode;
   pDebugMe = DebugMe;
+  pDecodeJObjectInThread = DecodeJObjectInThread;
+  pDeliverException = art_deliver_exception_from_code;
+  pFindNativeMethod = FindNativeMethod;
+  pInitializeTypeFromCode = InitializeTypeFromCode;
+  pInstanceofNonTrivialFromCode = Class::IsAssignableFromCode;
+  pObjectInit = ObjectInitFromCode;
+  pResolveMethodFromCode = ResolveMethodFromCode;
+  pResolveStringFromCode = ResolveStringFromCode;
+  pThrowAbstractMethodErrorFromCode = ThrowAbstractMethodErrorFromCode;
+  pUnresolvedDirectMethodTrampolineFromCode = UnresolvedDirectMethodTrampolineFromCode;
 }
 
 void* Thread::CreateCallback(void* arg) {
diff --git a/src/thread.h b/src/thread.h
index 12302ad..0d0f107 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -116,12 +116,13 @@
   int (*pIdiv)(int, int);
   long long (*pLmul)(long long, long long);
   long long (*pLdivmod)(long long, long long);
+  void (*pCheckSuspendFromCode)(Thread*);  // Stub that is called when the suspend count is non-zero
+  void (*pTestSuspendFromCode)();  // Stub that is periodically called to test the suspend count
   void* (*pAllocObjectFromCode)(uint32_t, void*);
   void* (*pAllocArrayFromCode)(uint32_t, void*, int32_t);
   void (*pCanPutArrayElementFromCode)(void*, void*);
   void* (*pCheckAndAllocArrayFromCode)(uint32_t, void*, int32_t);
   void (*pCheckCastFromCode) (void*, void*);
-  void (*pCheckSuspendFromCode)(Thread*);
   Object* (*pDecodeJObjectInThread)(Thread* thread, jobject obj);
   void (*pDeliverException)(void*);
   void* (*pFindInstanceFieldFromCode)(uint32_t, void*);
@@ -142,7 +143,6 @@
   int (*pSet32Static)(uint32_t, void*, int32_t);
   int (*pSet64Static)(uint32_t, void*, int64_t);
   int (*pSetObjStatic)(uint32_t, void*, void*);
-  void (*pTestSuspendFromCode)();
   void (*pThrowStackOverflowFromCode)(void*);
   void (*pThrowNullPointerFromCode)();
   void (*pThrowArrayBoundsFromCode)(int32_t, int32_t);
