Quick Search:

Mode

Context

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

Other Diffs

Ignore

Blank Lines Whitespace: Expand:

Diff

1.35
 
1.36
 
MAIN:ragge:20101104211205
 
code.c
_>696696         case STRREG: /* Struct in registers */
 697697                 /* Cast to long pointer and move to the registers */
 698698                 /* XXX can overrun struct size */
<> 699+                /* XXX check carefully for SSE members */
699700                 ssz = tsize(p->n_type, p->n_df, p->n_ap);
 700701 
 701702                 if (ssz <= SZLONG) {
     
 !
762763 static int
 763764 argsort(NODE *p)
 764765 {
<>765 -        NODE *q;
  766+        NODE *q, *r;
766767         int rv = 0;
 767768 
<>768 -        if (p->n_op != CM)
  769+        if (p->n_op != CM) {
  770+                if (p->n_op == ASSIGN && p->n_left->n_op == REG &&
  771+                    coptype(p->n_right->n_op) != LTYPE) {
  772+                        q = tempnode(0, p->n_type, p->n_df, p->n_ap);
  773+                        r = ccopy(q);
  774+                        p->n_right = buildtree(COMOP,
  775+                            buildtree(ASSIGN, q, p->n_right), r);
  776+                }
769777                 return rv;
<> 778+        }
770779         if (p->n_right->n_op == CM) {
 771780                 /* fixup for small structs in regs */
 772781                 q = p->n_right->n_left;
 773782                 p->n_right->n_left = p->n_left;
 774783                 p->n_left = p->n_right;
 775784                 p->n_right = q;
 776785         }
<> 786+        if (p->n_right->n_op == ASSIGN && p->n_right->n_left->n_op == REG &&
  787+            coptype(p->n_right->n_right->n_op) != LTYPE) {
  788+                /* move before everything to avoid reg trashing */
  789+                q = tempnode(0, p->n_right->n_type,
  790+                    p->n_right->n_df, p->n_right->n_ap);
  791+                r = ccopy(q);
  792+                p->n_right->n_right = buildtree(COMOP,
  793+                    buildtree(ASSIGN, q, p->n_right->n_right), r);
  794+        }
777795         if (p->n_right->n_op == ASSIGN && p->n_right->n_left->n_op == REG) {
 778796                 if (p->n_left->n_op == CM &&
 779797                     p->n_left->n_right->n_op == STASG) {
     
 !
818836         /* This avoids registers being clobbered */
 819837         while (argsort(p->n_right))
 820838                 ;
<>821 -
<_822839         /* Check if there are varargs */
 823840         if (nsse || l->n_df == NULL || l->n_df->dfun == NULL) {
 824841                 ; /* Need RAX */
FishEye: Open Source License registered to PCC.
Atlassian FishEye, CVS analysis. (Version:1.6.3 Build:build-336 2008-11-04) - Administration - Page generated 2014-12-21 05:46 +0100