Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: asmpart.S 7259 2007-01-30 13:58:35Z twisti $
+ $Id: asmpart.S 7325 2007-02-11 20:10:35Z twisti $
*/
* *
*******************************************************************************/
-#define MYSTACKSIZE (5*4)
+#define MYSTACKSIZE (6*4)
asm_call_jit_compiler:
SAVE_ARGUMENT_REGISTERS /* save our argument registers & LR */
+ sub sp, sp, #4 /* keep stack 8-byte aligned */
mov a0, itmp1 /* pass methodinfo pointer */
mov a1, mptr /* pass method pointer */
tst itmp1,itmp1 /* check for exeption */
beq L_asm_call_jit_compiler_exception
+ add sp, sp, #4 /* keep stack 8-byte aligned */
RESTORE_ARGUMENT_REGISTERS /* load our argument registers & LR */
mov ip, itmp1
bl exceptions_get_and_clear_exception
mov xptr, res1 /* get exception */
+ add sp, sp, #4 /* keep stack 8-byte aligned */
RESTORE_ARGUMENT_REGISTERS /* load LR */
sub xpc, lr, #4 /* xpc = instruction that called us */
M_NOP;
- /* save argument registers to stack (including LR and PV) */
+ /* Save argument registers to stack (including LR and PV). Keep
+ stack 8-byte aligned. */
+
M_STMFD(BITMASK_ARGS | (1<<REG_LR) | (1<<REG_PV), REG_SP);
- M_SUB_IMM(REG_SP, REG_SP, (2 + 2 + 1) * 4); /* space for a3, a4 and m */
+ M_SUB_IMM(REG_SP, REG_SP, (2 + 2 + 1 + 1) * 4); /* space for a3, a4 and m */
- stackframesize += 6 + 2 + 2 + 1;
+ stackframesize += 6 + 2 + 2 + 1 + 1;
/* prepare args for tracer */
M_LONGBRANCH(builtin_verbosecall_enter);
- /* restore argument registers from stack */
+ /* Restore argument registers from stack. Keep stack 8-byte
+ aligned. */
- M_ADD_IMM(REG_SP, REG_SP, (2 + 2 + 1) * 4); /* free argument stack */
+ M_ADD_IMM(REG_SP, REG_SP, (2 + 2 + 1 + 1) * 4); /* free argument stack */
M_LDMFD(BITMASK_ARGS | (1<<REG_LR) | (1<<REG_PV), REG_SP);
/* mark trace code */
M_NOP;
+ /* Keep stack 8-byte aligned. */
+
M_STMFD(BITMASK_RESULT | (1<<REG_LR) | (1<<REG_PV), REG_SP);
M_SUB_IMM(REG_SP, REG_SP, (1 + 1) * 4); /* space for f and m */
M_AST(REG_ITMP1, REG_SP, 1 * 4);
M_LONGBRANCH(builtin_verbosecall_exit);
+ /* Keep stack 8-byte aligned. */
+
M_ADD_IMM(REG_SP, REG_SP, (1 + 1) * 4); /* free argument stack */
M_LDMFD(BITMASK_RESULT | (1<<REG_LR) | (1<<REG_PV), REG_SP);