X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fregalloc.c;h=69ff881dde7d665792c64773bf2719149bfbefb2;hb=2c9494640a2b69951d34458d5e8683077c36a6ed;hp=3a0676407a1d725ec9630a44b4d6f06aef393bfd;hpb=9d61782c6e2392d7ceec2006b35be582598a70ae;p=mono.git diff --git a/mono/mini/regalloc.c b/mono/mini/regalloc.c index 3a0676407a1..69ff881dde7 100644 --- a/mono/mini/regalloc.c +++ b/mono/mini/regalloc.c @@ -20,93 +20,21 @@ mono_regstate_new (void) void mono_regstate_free (MonoRegState *rs) { - g_free (rs->iassign); - g_free (rs->fassign); + g_free (rs->vassign); g_free (rs); } void mono_regstate_reset (MonoRegState *rs) { - rs->next_vireg = MONO_MAX_IREGS; - rs->next_vfreg = MONO_MAX_FREGS; -} - -void -mono_regstate_assign (MonoRegState *rs) { - int i; - rs->max_ireg = -1; - g_free (rs->iassign); - rs->iassign = g_malloc (MAX (MONO_MAX_IREGS, rs->next_vireg) * sizeof (int)); - for (i = 0; i < MONO_MAX_IREGS; ++i) { - rs->iassign [i] = i; - rs->isymbolic [i] = 0; - } - for (; i < rs->next_vireg; ++i) - rs->iassign [i] = -1; - - g_free (rs->fassign); - rs->fassign = g_malloc (MAX (MONO_MAX_FREGS, rs->next_vfreg) * sizeof (int)); - for (i = 0; i < MONO_MAX_FREGS; ++i) { - rs->fassign [i] = i; - rs->fsymbolic [i] = 0; - } - for (; i < rs->next_vfreg; ++i) - rs->fassign [i] = -1; -} - -int -mono_regstate_alloc_int (MonoRegState *rs, regmask_t allow) -{ - int i; - regmask_t mask = allow & rs->ifree_mask; - for (i = 0; i < MONO_MAX_IREGS; ++i) { - if (mask & ((regmask_t)1 << i)) { - rs->ifree_mask &= ~ ((regmask_t)1 << i); - rs->max_ireg = MAX (rs->max_ireg, i); - return i; - } - } - return -1; -} - -void -mono_regstate_free_int (MonoRegState *rs, int reg) -{ - if (reg >= 0) { - rs->ifree_mask |= (regmask_t)1 << reg; - rs->isymbolic [reg] = 0; - } -} - -int -mono_regstate_alloc_float (MonoRegState *rs, regmask_t allow) -{ - int i; - regmask_t mask = allow & rs->ffree_mask; - for (i = 0; i < MONO_MAX_FREGS; ++i) { - if (mask & ((regmask_t)1 << i)) { - rs->ffree_mask &= ~ ((regmask_t)1 << i); - return i; - } - } - return -1; -} - -void -mono_regstate_free_float (MonoRegState *rs, int reg) -{ - if (reg >= 0) { - rs->ffree_mask |= (regmask_t)1 << reg; - rs->fsymbolic [reg] = 0; - } + rs->next_vreg = MAX (MONO_MAX_IREGS, MONO_MAX_FREGS); } inline int mono_regstate_next_long (MonoRegState *rs) { - int rval = rs->next_vireg; + int rval = rs->next_vreg; - rs->next_vireg += 2; + rs->next_vreg += 2; return rval; }