// EXTERN_C void EnterNaked3(FunctionIDOrClientID functionIDOrClientID);
//
NESTED_ENTRY EnterNaked3, _TEXT, NoHandler
- push {r0-r7, lr}
- .save {r0-r7, lr}
+ // From src/jit/codegenarm.cpp:
+ // On Arm arguments are prespilled on stack, which frees r0-r3.
+ PROLOG_PUSH "{r4-r11, lr}"
+ alloc_stack 4 // 8 byte align
bl C_FUNC(EnterStub)
- pop {r0-r7, pc}
+ free_stack 4
+ EPILOG_POP "{r4-r11, pc}"
NESTED_END EnterNaked3, _TEXT
//
// EXTERN_C void LeaveNaked3(FunctionIDOrClientID functionIDOrClientID);
//
NESTED_ENTRY LeaveNaked3, _TEXT, NoHandler
- push {r0-r7, lr}
- .save {r0-r7, lr}
+ // From src/jit/codegenarm.cpp:
+ // It is assumed that profiler Leave callback doesn't trash registers r1,REG_PROFILER_RET_SCRATCH (r2)...
+ // In the following cases r0 doesn't contain a return value and hence need not be preserved before emitting Leave callback.
+ PROLOG_PUSH "{r1, r2, r4-r11, lr}"
+ alloc_stack 4 // 8 byte align
bl C_FUNC(LeaveStub)
- pop {r0-r7, pc}
+ free_stack 4
+ EPILOG_POP "{r1, r2, r4-r11, pc}"
NESTED_END LeaveNaked3, _TEXT
//
// EXTERN_C void TailcallNaked3(FunctionIDOrClientID functionIDOrClientID);
//
NESTED_ENTRY TailcallNaked3, _TEXT, NoHandler
- push {r0-r7, lr}
- .save {r0-r7, lr}
+ // From src/jit/codegenarm.cpp:
+ // It is assumed that profiler Leave callback doesn't trash registers r1,REG_PROFILER_RET_SCRATCH (r2)...
+ // In the following cases r0 doesn't contain a return value and hence need not be preserved before emitting Leave callback.
+ // Note, Jit use same code for Tail callback helper and for Leave callback helper.
+ PROLOG_PUSH "{r1, r2, r4-r11, lr}"
+ alloc_stack 4 // 8 byte align
bl C_FUNC(TailcallStub)
- pop {r0-r7, pc}
+ free_stack 4
+ EPILOG_POP "{r1, r2, r4-r11, pc}"
NESTED_END TailcallNaked3, _TEXT
NESTED_ENTRY getPrevPC, _TEXT, NoHandler