+
+Mon May 24 11:13:46 CEST 2004 Paolo Molaro <lupus@ximian.com>
+
+ * mini-x86.c: fix calc of max loop size when aligning loops start.
+
2004-05-23 Zoltan Varga <vargaz@freemail.hu>
* ssa.c (mono_ssa_cprop): Allocate carray dynamically instead of on
x86_pop_reg (code, X86_EDX); \
x86_pop_reg (code, X86_EAX);
+/* benchmark and set based on cpu */
+#define LOOP_ALIGNMENT 8
+#define bb_is_loop_start(bb) ((bb)->nesting && ((bb)->in_count == 1))
+
void
mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
{
peephole_pass (cfg, bb);
if (cfg->opt & MONO_OPT_LOOP) {
- int pad, align = 8;
+ int pad, align = LOOP_ALIGNMENT;
/* set alignment depending on cpu */
- if (bb->nesting && (bb->in_count == 1) && (pad = (cfg->code_len & (align - 1)))) {
+ if (bb_is_loop_start (bb) && (pad = (cfg->code_len & (align - 1)))) {
pad = align - pad;
/*g_print ("adding %d pad at %x to loop in %s\n", pad, cfg->code_len, cfg->method->name);*/
x86_padding (code, pad);
bb->max_offset = max_offset;
if (cfg->prof_options & MONO_PROFILE_COVERAGE)
- max_offset += 6;
+ max_offset += 6;
+ /* max alignment for loops */
+ if ((cfg->opt & MONO_OPT_LOOP) && bb_is_loop_start (bb))
+ max_offset += LOOP_ALIGNMENT;
while (ins) {
max_offset += ((guint8 *)ins_spec [ins->opcode])[MONO_INST_LEN];