repaired inreg() pseudofunction, it delivered total nonsense
authorsater <none@none>
Thu, 27 Mar 1986 15:49:16 +0000 (15:49 +0000)
committersater <none@none>
Thu, 27 Mar 1986 15:49:16 +0000 (15:49 +0000)
mach/proto/ncg/compute.c
mach/proto/ncg/regvar.c

index 4682fb7..0de478f 100644 (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);
index 9805d0e..c0f48d5 100644 (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;