repaired inreg() pseudofunction, it delivered total nonsense
This commit is contained in:
parent
5bdb108e47
commit
851a68883c
2 changed files with 11 additions and 2 deletions
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue