Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMassimiliano Mantione <massi@mono-cvs.ximian.com>2007-01-24 13:52:55 +0300
committerMassimiliano Mantione <massi@mono-cvs.ximian.com>2007-01-24 13:52:55 +0300
commit1eaaa18395802dddab16194a06c8e34199f5d312 (patch)
tree1d9d43b46585697fd8f45a6fc46d2ffd665d9cc7
parent2ceff0a23e53d958d27872073094d51cb931c309 (diff)
* 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
-rw-r--r--mono/mini/ChangeLog4
-rw-r--r--mono/mini/inssel-amd64.brg2
-rw-r--r--mono/mini/inssel-x86.brg2
-rw-r--r--mono/mini/mini-alpha.c4
-rw-r--r--mono/mini/mini-arch.h6
-rw-r--r--mono/mini/mini-ia64.c6
-rw-r--r--mono/mini/mini-sparc.c6
-rw-r--r--mono/mini/mini-x86.c4
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 <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>
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;