From 1eaaa18395802dddab16194a06c8e34199f5d312 Mon Sep 17 00:00:00 2001 From: Massimiliano Mantione Date: Wed, 24 Jan 2007 10:52:55 +0000 Subject: * 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. svn path=/trunk/mono/; revision=71585 --- mono/mini/ChangeLog | 4 ++++ mono/mini/inssel-amd64.brg | 2 +- mono/mini/inssel-x86.brg | 2 +- mono/mini/mini-alpha.c | 4 ++-- mono/mini/mini-arch.h | 6 ++++++ mono/mini/mini-ia64.c | 6 +++--- mono/mini/mini-sparc.c | 6 +++--- mono/mini/mini-x86.c | 4 ++-- 8 files changed, 22 insertions(+), 12 deletions(-) diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog index 7db822da5d6..2d35e8be58f 100644 --- a/mono/mini/ChangeLog +++ b/mono/mini/ChangeLog @@ -1,3 +1,7 @@ +2007-01-24 Massimiliano Mantione + * 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 diff --git a/mono/mini/inssel-amd64.brg b/mono/mini/inssel-amd64.brg index 327d3b50db9..c3b874ed599 100644 --- a/mono/mini/inssel-amd64.brg +++ b/mono/mini/inssel-amd64.brg @@ -121,7 +121,7 @@ reg: OP_LOCALLOC (OP_ICONST) { 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); } diff --git a/mono/mini/inssel-x86.brg b/mono/mini/inssel-x86.brg index 059e3132112..63466c3e557 100644 --- a/mono/mini/inssel-x86.brg +++ b/mono/mini/inssel-x86.brg @@ -219,7 +219,7 @@ reg: OP_LOCALLOC (OP_ICONST) { 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); } diff --git a/mono/mini/mini-alpha.c b/mono/mini/mini-alpha.c index ebef333a280..68e2495b6c4 100644 --- a/mono/mini/mini-alpha.c +++ b/mono/mini/mini-alpha.c @@ -3451,8 +3451,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) // 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); diff --git a/mono/mini/mini-arch.h b/mono/mini/mini-arch.h index f21a2ae5f46..67b182af8e8 100644 --- a/mono/mini/mini-arch.h +++ b/mono/mini/mini-arch.h @@ -27,4 +27,10 @@ #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__ */ diff --git a/mono/mini/mini-ia64.c b/mono/mini/mini-ia64.c index 917e4e485fa..8e7cd86532c 100644 --- a/mono/mini/mini-ia64.c +++ b/mono/mini/mini-ia64.c @@ -3031,8 +3031,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) /* 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); @@ -3040,7 +3040,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) 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 { diff --git a/mono/mini/mini-sparc.c b/mono/mini/mini-sparc.c index 30b22ffeb68..c8350a9b015 100644 --- a/mono/mini/mini-sparc.c +++ b/mono/mini/mini-sparc.c @@ -2883,8 +2883,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) #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)) { @@ -2937,7 +2937,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) 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 { diff --git a/mono/mini/mini-x86.c b/mono/mini/mini-x86.c index d63ed4f974e..ac1e9612c89 100644 --- a/mono/mini/mini-x86.c +++ b/mono/mini/mini-x86.c @@ -2453,8 +2453,8 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb) 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; -- cgit v1.2.3