* mini-arch.h, , inssel-amd64.brg, mini-x86.c, inssel-x86.brg,
authorMassimiliano Mantione <massi@mono-cvs.ximian.com>
Wed, 24 Jan 2007 10:52:55 +0000 (10:52 -0000)
committerMassimiliano Mantione <massi@mono-cvs.ximian.com>
Wed, 24 Jan 2007 10:52:55 +0000 (10:52 -0000)
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
mono/mini/inssel-amd64.brg
mono/mini/inssel-x86.brg
mono/mini/mini-alpha.c
mono/mini/mini-arch.h
mono/mini/mini-ia64.c
mono/mini/mini-sparc.c
mono/mini/mini-x86.c

index 7db822da5d6ba7f82e1087be4efbfa1ff0b059c6..2d35e8be58f841fb65195155aa9d3c16f0ea8e66 100644 (file)
@@ -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>
 
index 327d3b50db95b25154b4912b7fa3cef03cc83009..c3b874ed599ebfd5657261ef5706fd83783a6ea7 100644 (file)
@@ -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);
        }
index 059e313211295dc80fb41ef093893114f6bbc3ce..63466c3e557fe0c577d29e5bba3eca00db709a93 100644 (file)
@@ -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);
        }
index ebef333a280af35de52a6fb4bb81135c3708d9fe..68e2495b6c406cd4ecbd45cde244cc9b234b0268 100644 (file)
@@ -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);
index f21a2ae5f46e7d806963f77efc53587031f8f5e6..67b182af8e82f33c90060f2b5104cbc246027ca3 100644 (file)
 #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__ */  
index 917e4e485facad76a37d930514983cc2553a097f..8e7cd86532cb21484f05e0996ce52119862fa532 100644 (file)
@@ -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 {
index 30b22ffeb680f0a94a6401cd92e792bc90085faa..c8350a9b015eac1ffbd6cfa6c44c0d381f3965b6 100644 (file)
@@ -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 {
index d63ed4f974e58fbb25477cd9884a4c1534b4e2f1..ac1e9612c8945d96599bd92474cdff0f733fe64b 100644 (file)
@@ -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;