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 rGLUE 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, rGLUE               @ 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    pop     {r0, r7}                    @ recover r0, r7
21    bx      lr
22