Quick Search:

Mode

Context

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

Other Diffs

Ignore

Blank Lines Whitespace: Expand:

Diff

1.158
 
1.159
 
MAIN:ragge:20120331085411
 
local.c
_>489489                         
 490490                 break;
 491491 
<> 492+#if defined(os_openbsd)
  493+/*
  494+ * The called function returns structures according to their aligned size:
  495+ *  Structures 1, 2 or 4 bytes in size are placed in EAX.
  496+ *  Structures 8 bytes in size are placed in: EAX and EDX.
  497+ */
  498+        case UMUL:
  499+                o = 0;
  500+                l = p->n_left;
  501+                if (l->n_op == PLUS)
  502+                        l = l->n_left, o++;
  503+                if (l->n_op != PCONV)
  504+                        break;
  505+                l = l->n_left;
  506+                if (l->n_op != STCALL && l->n_op != USTCALL)
  507+                        break;
  508+                m = tsize(DECREF(l->n_type), l->n_df, l->n_ap);
  509+                if (m != SZCHAR && m != SZSHORT &&
  510+                    m != SZINT && m != SZLONGLONG)
  511+                        break;
  512+                /* This is a direct reference to a small struct return */
  513+                l->n_op -= (STCALL-CALL);
  514+                if (o == 0) {
  515+                        /* first element in struct */
  516+                        p->n_left = nfree(p->n_left); /* free PCONV */
  517+                        l->n_ap = p->n_ap;
  518+                        l->n_df = p->n_df;
  519+                        l->n_type = p->n_type;
  520+                        if (p->n_type < INT) {
  521+                                /* Need to add SCONV */
  522+                                p->n_op = SCONV;
  523+                        } else
  524+                                p = nfree(p); /* no casts needed */
  525+                } else {
  526+                        /* convert PLUS to RS */
  527+                        o = p->n_left->n_right->n_lval;
  528+                        l->n_type = (o > 3 ? ULONGLONG : UNSIGNED);
  529+                        nfree(p->n_left->n_right);
  530+                        p->n_left = nfree(p->n_left);
  531+                        p->n_left = nfree(p->n_left);
  532+                        p->n_left = buildtree(RS, p->n_left, bcon(o*8));
  533+                        p->n_left = makety(p->n_left, p->n_type, p->n_qual,
  534+                            p->n_df, p->n_ap);
  535+                        p = nfree(p);
  536+                }
  537+                break;
  538+#endif
  539+
492540 #ifdef notyet
 493541         /* XXX breaks sometimes */
 494542         case CBRANCH:
     
 !
539587                 if (l->n_op == ADDROF && l->n_left->n_op == TEMP)
 540588                         break;
 541589 
<>542 -                /* if conversion to another pointer type, just remove */
 543 -                if (p->n_type > BTMASK && l->n_type > BTMASK)
 544 -                        goto delp;
<_545590                 break;
 546591 
 547592         delp:   l->n_type = p->n_type;
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-09-01 09:36 +0200