summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--lisc/rega.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/lisc/rega.c b/lisc/rega.c
index b31f7a4..d6445c3 100644
--- a/lisc/rega.c
+++ b/lisc/rega.c
@@ -238,17 +238,17 @@ dopm(Blk *b, Ins *i, RMap *m)
 	else if (isreg(i->arg[0]))
 		for (;; i--) {
 			r = RBASE(i->arg[0].val);
-			if (req(i->to, R)) {
-				if (BGET(m->b, r)) {
-					for (n=0; m->r[n] != r; n++)
-						assert(n+1 < m->n);
-					t = m->t[n];
-					rfree(m, t);
-					BSET(m->b, r);
-					rt = ralloc(m, t);
-					pmadd(rt, i->arg[0]);
-				}
-			} else if (BGET(m->b, i->to.val)) {
+			if (BGET(m->b, r)) {
+				for (n=0; m->r[n] != r; n++)
+					assert(n+1 < m->n);
+				t = m->t[n];
+				rfree(m, t);
+				BSET(m->b, r);
+				rt = ralloc(m, t);
+				BCLR(m->b, r);
+				pmadd(rt, i->arg[0]);
+			}
+			if (!req(i->to, R) && BGET(m->b, i->to.val)) {
 				rt = reg(rfree(m, i->to.val), i->to.val);
 				pmadd(i->arg[0], rt);
 			}