repaired inreg() pseudofunction, it delivered total nonsense

This commit is contained in:
sater 1986-03-27 15:49:16 +00:00
parent 5bdb108e47
commit 851a68883c
2 changed files with 11 additions and 2 deletions

View file

@ -346,8 +346,7 @@ result_t compute(node) register node_p node; {
#ifdef REGVARS
case EX_INREG:
assert(leaf1.e_typ == EV_INT);
if ((result.e_v.e_con = isregvar((long) leaf1.e_v.e_con))>0)
result.e_v.e_con = machregs[result.e_v.e_con].r_size;
result.e_v.e_con = isregtyp((long) leaf1.e_v.e_con);
return(result);
case EX_REGVAR:
assert(leaf1.e_typ == EV_INT);

View file

@ -111,6 +111,7 @@ fixregvars(saveall) {
} else if(regassigned[rvtyp][i].ra_score>0) {
rv=regassigned[rvtyp][i].ra_rv;
rv->rv_reg=rvnumbers[rvtyp][i];
rv->rv_type = rvtyp;
regsave(codestrings[machregs[rv->rv_reg].r_repr],
rv->rv_off,rv->rv_size);
}
@ -127,6 +128,15 @@ isregvar(off) long off; {
return(-1);
}
isregtyp(off) long off; {
register struct regvar *rvlp;
for(rvlp=rvlist;rvlp!=0;rvlp=rvlp->rv_next)
if(rvlp->rv_off == off)
return(rvlp->rv_reg ? rvlp->rv_type+1 : 0);
return(-1);
}
unlinkregs() {
register struct regvar *rvlp,*t;
register struct regassigned *ra;