-
-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;
- }
-}
-
-inline int
-mono_regstate_next_long (MonoRegState *rs)
-{
- int rval = rs->next_vireg;
-
- rs->next_vireg += 2;
-
- return rval;
-}
-