From f0d3a648afb275805b0697f6223bac5c91931af4 Mon Sep 17 00:00:00 2001 From: ceriel Date: Fri, 15 Jul 1988 11:12:13 +0000 Subject: [PATCH] fixed problem with temporary DEALLOCATES: sometimes a register was used for stacking, that was only temporarily deallocated --- mach/proto/ncg/codegen.c | 4 ++-- mach/proto/ncg/equiv.c | 2 +- mach/proto/ncg/reg.c | 6 +++--- mach/proto/ncg/subr.c | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mach/proto/ncg/codegen.c b/mach/proto/ncg/codegen.c index 692230133..9500a3689 100644 --- a/mach/proto/ncg/codegen.c +++ b/mach/proto/ncg/codegen.c @@ -569,7 +569,7 @@ normalfailed: if (stackpad!=tokpatlen) { do { npos=exactmatch=0; for(rpp=reglist[propno];rp= *rpp; rpp++) - if (getrefcount(rp-machregs)==0) { + if (getrefcount(rp-machregs, FALSE)==0) { pos[npos++] = rp-machregs; if (eqtoken(&rp->r_contents,&token)) exactmatch++; @@ -651,7 +651,7 @@ normalfailed: if (stackpad!=tokpatlen) { } } else { decision = forced; - if (getrefcount(decision)!=0) + if (getrefcount(decision, FALSE)!=0) BROKE(); token2.t_token = -1; } diff --git a/mach/proto/ncg/equiv.c b/mach/proto/ncg/equiv.c index 82c05e98e..ad1437f13 100644 --- a/mach/proto/ncg/equiv.c +++ b/mach/proto/ncg/equiv.c @@ -38,7 +38,7 @@ tuples(regls,nregneeded) rl_p *regls; { for (i=0;ir_members[0]==0) #endif - return(rp->r_refcount); + return(rp->r_refcount - (tflag ? rp->r_tcount : 0)); #if MAXMEMBERS!=0 else { maxcount=0; for (i=0;ir_members[i]!=0) - maxcount=max(maxcount,getrefcount(rp->r_members[i])); + maxcount=max(maxcount,getrefcount(rp->r_members[i], tflag)); return(maxcount); } #endif diff --git a/mach/proto/ncg/subr.c b/mach/proto/ncg/subr.c index 0f2905d8f..d7a4eec39 100644 --- a/mach/proto/ncg/subr.c +++ b/mach/proto/ncg/subr.c @@ -30,7 +30,7 @@ match(tp,tep,optexp) register token_p tp; register set_p tep; { if (tp->t_token == -1) { /* register frame */ bitno = tp->t_att[0].ar; if (tep->set_val[bitno>>4]&(1<<(bitno&017))) - if (tep->set_val[0]&1 || getrefcount(tp->t_att[0].ar)<=1) + if (tep->set_val[0]&1 || getrefcount(tp->t_att[0].ar, FALSE)<=1) goto oklabel; return(0); } else { /* token frame */ @@ -534,7 +534,7 @@ unsigned stackupto(limit,ply,toplevel) token_p limit; { if (cp->c1_prop>=0) { for (rpp=reglist[cp->c1_prop]; (rp = *rpp)!=0 && - getrefcount(rp-machregs)!=0; + getrefcount(rp-machregs, TRUE)!=0; rpp++) ; if (rp==0) -- 2.34.1