- { /* undo any effect on uses in the area between p and q,
- * as we are going over it again */
- register struct node *b;
- for(b=p; b!=q; b=b->back) {
- for(r=0; r<NUSE; r++) {
- if(uses[r] == b)
- uses[r] = 0;
- if(useacc == b)
- useacc = 0;
- }
- }
+ for(p = p->back; p != q && (!uses[r] || !uses[r+1]); p = p->back) {
+ int xr;
+
+ splitrand(p);
+ if((xr=isreg(regs[RT1])) < 0)
+ continue;
+ if(!uses[r] && xr == r)
+ uses[r] = p;
+ else if(q->subop == DOUBLE && !uses[r+1] && xr == r+1)
+ uses[r+1] = p;