1 /* 2 * This handler performs a register save for selfVerification mode. 3 * On entry: 4 * Top of stack + 4: r7 value to save 5 * Top of stack + 0: r0 value to save 6 * r0 - offset from rSELF to the beginning of the heapArgSpace record 7 * r7 - the value of regMap 8 * 9 * The handler must save regMap, r0-r12 and then return with r0-r12 10 * with their original values (note that this means r0 and r7 must take 11 * the values on the stack - not the ones in those registers on entry. 12 * Finally, the two registers previously pushed must be popped. 13 */ 14 add r0, r0, rSELF @ pointer to heapArgSpace 15 stmia r0!, {r7} @ save regMap 16 ldr r7, [r13, #0] @ recover r0 value 17 stmia r0!, {r7} @ save r0 18 ldr r7, [r13, #4] @ recover r7 value 19 stmia r0!, {r1-r12} 20 add r0, #12 @ move to start of FP save regio 21 vstmia r0, {d0-d15} 22 pop {r0, r7} @ recover r0, r7 23 bx lr 24