OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / dalvik / vm / compiler / template / armv5te-vfp / TEMPLATE_SAVE_STATE.S
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     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