2 * regalloc.c: register state class
5 * Paolo Molaro (lupus@ximian.com)
7 * (C) 2003 Ximian, Inc.
12 mono_regstate_new (void)
14 MonoRegState* rs = g_new0 (MonoRegState, 1);
16 mono_regstate_reset (rs);
22 mono_regstate_free (MonoRegState *rs) {
28 mono_regstate_reset (MonoRegState *rs) {
29 rs->next_vireg = MONO_MAX_IREGS;
30 rs->next_vfreg = MONO_MAX_FREGS;
34 mono_regstate_assign (MonoRegState *rs) {
37 rs->iassign = g_malloc (MAX (MONO_MAX_IREGS, rs->next_vireg));
38 for (i = 0; i < MONO_MAX_IREGS; ++i) {
40 rs->isymbolic [i] = 0;
42 for (; i < rs->next_vireg; ++i)
47 mono_regstate_alloc_int (MonoRegState *rs, guint32 allow)
50 guint32 mask = allow & rs->ifree_mask;
51 for (i = 0; i < MONO_MAX_IREGS; ++i) {
52 if (mask & (1 << i)) {
53 rs->ifree_mask &= ~ (1 << i);
61 mono_regstate_free_int (MonoRegState *rs, int reg)
64 rs->ifree_mask |= 1 << reg;
65 rs->isymbolic [reg] = 0;
70 mono_regstate_next_long (MonoRegState *rs)
72 int rval = rs->next_vireg;