Quick Search:

Mode

Context

Displaying 3 lines of context. None | Less | More | Full

Other Diffs

Ignore

Blank Lines Whitespace: Expand:

Diff

1.138
 
1.139
 
MAIN:ragge:20050629124008
 
reader.c
_>715715 static void
 716716 rewrite(NODE *p, int rewrite)
 717717 {
<> 718+        struct optab *q = &table[TBLIDX(p->n_su)];
718719         NODE *l, *r;
 719720         int o;
 720721 
     
 !
727728         p->n_op = REG;
 728729         p->n_lval = 0;
 729730         p->n_name = "";
<>730 -        if (rewrite & RLEFT) {
  731+        if (xnewreg && (q->needs & NSPECIAL)) {
  732+                int left, right, res, mask;
  733+                nspecial(q, &left, &right, &res, &mask);
  734+                p->n_rval = p->n_rall = ffs(res)-1;
  735+        } else if (rewrite & RLEFT) {
731736 #ifdef PCC_DEBUG
 732737                 if (l->n_op != REG)
 733738                         comperr("rewrite left");
     
 !
776781                 gencode(p->n_left, INTAREG|INTBREG);
 777782                 if ((p->n_su & LMASK) == LOREG) {
 778783                         canon(p);
<>779 -                } else if (xnewreg && (p->n_su & LMASK) == LREG &&
 780 -                    (q->rewrite & RLEFT) && p->n_left->n_rall != p->n_rall) {
 781 -                        rmove(p->n_left->n_rall, p->n_rall, p->n_type);
 782 -                        p->n_left->n_rall = p->n_rall;
 783 -                        p->n_left->n_rval = p->n_rall;
  784+                } else if (xnewreg && (p->n_su & LMASK) == LREG) {
  785+                        if (q->needs & NSPECIAL) {
  786+                                int left, right, res, mask;
  787+
  788+                                nspecial(q, &left, &right, &res, &mask);
  789+                                if (left && ffs(left)-1 != p->n_left->n_rall) {
  790+                                        rmove(p->n_left->n_rall, ffs(left)-1,
  791+                                            p->n_type);
  792+                                        p->n_left->n_rall = ffs(left)-1;
  793+                                        p->n_left->n_rval = ffs(left)-1;
  794+                                }
  795+                        } else if ((q->rewrite & RLEFT) &&
  796+                            p->n_left->n_rall != p->n_rall) {
  797+                                rmove(p->n_left->n_rall, p->n_rall, p->n_type);
  798+                                p->n_left->n_rall = p->n_rall;
  799+                                p->n_left->n_rval = p->n_rall;
  800+                        }
<_784801                 }
 785802         }
 786803         if ((p->n_su & RMASK) && !(p->n_su & DORIGHT)) {
FishEye: Open Source License registered to PCC.
Your maintenance has expired. You can renew your license at http://www.atlassian.com/fisheye/renew
Atlassian FishEye, CVS analysis. (Version:1.6.3 Build:build-336 2008-11-04) - Administration - Page generated 2014-10-31 16:48 +0100