+2007-01-24 Massimiliano Mantione <massi@ximian.com>
+ * mini-arch.h, , inssel-amd64.brg, mini-x86.c, inssel-x86.brg,
+ mini-ia64.c, mini-sparc.c, mini-alpha.c: Introduced
+ MONO_ARCH_LOCALLOC_ALIGNMEENT to fix bug 80498.
Wed Jan 24 12:04:39 GMT 2007 Paolo Molaro <lupus@ximian.com>
mono_bblock_add_inst (s->cbb, tree);
} else {
guint32 size = state->left->tree->inst_c0;
- size = (size + (MONO_ARCH_FRAME_ALIGNMENT - 1)) & ~ (MONO_ARCH_FRAME_ALIGNMENT - 1);
+ size = (size + (MONO_ARCH_LOCALLOC_ALIGNMENT - 1)) & ~ (MONO_ARCH_LOCALLOC_ALIGNMENT - 1);
MONO_EMIT_NEW_BIALU_IMM (s, OP_SUB_IMM, X86_ESP, X86_ESP, size);
MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, X86_ESP);
}
mono_bblock_add_inst (s->cbb, tree);
} else {
guint32 size = state->left->tree->inst_c0;
- size = (size + (MONO_ARCH_FRAME_ALIGNMENT - 1)) & ~ (MONO_ARCH_FRAME_ALIGNMENT - 1);
+ size = (size + (MONO_ARCH_LOCALLOC_ALIGNMENT - 1)) & ~ (MONO_ARCH_LOCALLOC_ALIGNMENT - 1);
MONO_EMIT_NEW_BIALU_IMM (s, OP_SUB_IMM, X86_ESP, X86_ESP, size);
MONO_EMIT_UNALU (s, tree, OP_MOVE, state->reg1, X86_ESP);
}
// top of stack is used for call params
CFG_DEBUG(4) g_print("ALPHA_CHECK: [localloc] sreg=%d, dreg=%d\n",
ins->sreg1, ins->dreg);
- alpha_addq_(code, ins->sreg1, (MONO_ARCH_FRAME_ALIGNMENT - 1), ins->sreg1);
- alpha_and_(code, ins->sreg1, ~(MONO_ARCH_FRAME_ALIGNMENT - 1), ins->sreg1);
+ alpha_addq_(code, ins->sreg1, (MONO_ARCH_LOCALLOC_ALIGNMEENT - 1), ins->sreg1);
+ alpha_and_(code, ins->sreg1, ~(MONO_ARCH_LOCALLOC_ALIGNMEENT - 1), ins->sreg1);
alpha_subq(code, alpha_sp, ins->sreg1, alpha_sp);
alpha_lda(code, ins->dreg, alpha_zero, (cfg->arch.params_stack_size));
alpha_addq(code, alpha_sp, ins->dreg, ins->dreg);
#error add arch specific include file in mini-arch.h
#endif
+#if (MONO_ARCH_FRAME_ALIGNMENT == 4)
+#define MONO_ARCH_LOCALLOC_ALIGNMEENT 8
+#else
+#define MONO_ARCH_LOCALLOC_ALIGNMENT MONO_ARCH_FRAME_ALIGNMENT
+#endif
+
#endif /* __MONO_MINI_ARCH_H__ */
/* FIXME: Sigaltstack support */
/* keep alignment */
- ia64_adds_imm (code, GP_SCRATCH_REG, MONO_ARCH_FRAME_ALIGNMENT - 1, ins->sreg1);
- ia64_movl (code, GP_SCRATCH_REG2, ~(MONO_ARCH_FRAME_ALIGNMENT - 1));
+ ia64_adds_imm (code, GP_SCRATCH_REG, MONO_ARCH_LOCALLOC_ALIGNMEENT - 1, ins->sreg1);
+ ia64_movl (code, GP_SCRATCH_REG2, ~(MONO_ARCH_LOCALLOC_ALIGNMEENT - 1));
ia64_and (code, GP_SCRATCH_REG, GP_SCRATCH_REG, GP_SCRATCH_REG2);
ia64_sub (code, IA64_SP, IA64_SP, GP_SCRATCH_REG);
ia64_mov (code, ins->dreg, IA64_SP);
/* An area at sp is reserved by the ABI for parameter passing */
- abi_offset = - ALIGN_TO (cfg->param_area + 16, MONO_ARCH_FRAME_ALIGNMENT);
+ abi_offset = - ALIGN_TO (cfg->param_area + 16, MONO_ARCH_LOCALLOC_ALIGNMEENT);
if (ia64_is_adds_imm (abi_offset))
ia64_adds_imm (code, IA64_SP, abi_offset, IA64_SP);
else {
#endif
/* Keep alignment */
- sparc_add_imm (code, FALSE, ins->sreg1, MONO_ARCH_FRAME_ALIGNMENT - 1, ins->dreg);
- sparc_set (code, ~(MONO_ARCH_FRAME_ALIGNMENT - 1), sparc_o7);
+ sparc_add_imm (code, FALSE, ins->sreg1, MONO_ARCH_LOCALLOC_ALIGNMEENT - 1, ins->dreg);
+ sparc_set (code, ~(MONO_ARCH_LOCALLOC_ALIGNMEENT - 1), sparc_o7);
sparc_and (code, FALSE, ins->dreg, sparc_o7, ins->dreg);
if ((ins->flags & MONO_INST_INIT) && (ins->sreg1 == ins->dreg)) {
NOT_IMPLEMENTED;
#endif
- offset = ALIGN_TO (offset, MONO_ARCH_FRAME_ALIGNMENT);
+ offset = ALIGN_TO (offset, MONO_ARCH_LOCALLOC_ALIGNMEENT);
if (sparc_is_imm13 (offset))
sparc_sub_imm (code, FALSE, sparc_sp, offset, sparc_sp);
else {
break;
case OP_LOCALLOC:
/* keep alignment */
- x86_alu_reg_imm (code, X86_ADD, ins->sreg1, MONO_ARCH_FRAME_ALIGNMENT - 1);
- x86_alu_reg_imm (code, X86_AND, ins->sreg1, ~(MONO_ARCH_FRAME_ALIGNMENT - 1));
+ x86_alu_reg_imm (code, X86_ADD, ins->sreg1, MONO_ARCH_LOCALLOC_ALIGNMEENT - 1);
+ x86_alu_reg_imm (code, X86_AND, ins->sreg1, ~(MONO_ARCH_LOCALLOC_ALIGNMEENT - 1));
code = mono_emit_stack_alloc (code, ins);
x86_mov_reg_reg (code, ins->dreg, X86_ESP, 4);
break;