Lines Matching refs:p

33 static int argsiz(NODE *p);
113 tlen(p) NODE *p; in tlen() argument
115 switch(p->n_type) {
138 if (!ISPTR(p->n_type))
140 return SZPOINT(p->n_type)/SZCHAR;
148 twolcomp(NODE *p) in twolcomp() argument
150 int o = p->n_op; in twolcomp()
152 int e = p->n_label; in twolcomp()
180 if (p->n_op >= ULE) in twolcomp()
182 expand(p, 0, "cmp AR,AL\n"); in twolcomp()
185 expand(p, 0, "cmp UR,UL\n"); in twolcomp()
186 cbgen(p->n_op, e); in twolcomp()
195 lcomp(NODE *p) in lcomp() argument
197 switch (p->n_op) { in lcomp()
199 expand(p, FORCC, "tst AL\n"); in lcomp()
201 expand(p, FORCC, "tst UL\n"); in lcomp()
202 cbgen(EQ, p->n_label); in lcomp()
206 expand(p, FORCC, "tst AL\n"); in lcomp()
207 cbgen(NE, p->n_label); in lcomp()
208 expand(p, FORCC, "tst UL\n"); in lcomp()
209 cbgen(NE, p->n_label); in lcomp()
212 expand(p, FORCC, "tst AL\n"); in lcomp()
213 cbgen(GE, p->n_label); in lcomp()
216 comperr("lcomp %p", p); in lcomp()
221 zzzcode(NODE *p, int c) in zzzcode() argument
225 if (spcoff || (p->n_type == FLOAT || p->n_type == DOUBLE)) in zzzcode()
227 spcoff += argsiz(p); in zzzcode()
231 expand(p->n_left, FOREFF, "mov AL,ZA(sp)\n"); in zzzcode()
232 expand(p->n_left, FOREFF, "sub CR,(sp)\n"); in zzzcode()
236 spcoff -= p->n_qual; in zzzcode()
238 p->n_qual -= 2; in zzzcode()
239 if (p->n_qual == 2) in zzzcode()
241 else if (p->n_qual == 4) in zzzcode()
243 else if (p->n_qual > 2) in zzzcode()
244 printf("add $%o,sp\n", (int)p->n_qual); in zzzcode()
248 lcomp(p); in zzzcode()
252 rmove(p->n_right->n_reg, p->n_left->n_reg, p->n_type); in zzzcode()
256 twolcomp(p); in zzzcode()
260 adrput(stdout, p->n_left->n_left); in zzzcode()
264 expand(p->n_left->n_left, FOREFF, "mov AL,ZA(sp)\n"); in zzzcode()
265 expand(p->n_left->n_left, FOREFF, "inc AL\n"); in zzzcode()
269 printf("mov $%o,", attr_find(p->n_ap, ATTR_P2STRUCT)->iarg(0)/2); in zzzcode()
270 expand(p, INAREG, "A1\n"); in zzzcode()
272 expand(p, INAREG, "mov (AR)+,(AL)+\n"); in zzzcode()
273 expand(p, INAREG, "dec A1\n"); in zzzcode()
278 printf("mov $%o,", attr_find(p->n_ap, ATTR_P2STRUCT)->iarg(0)/2); in zzzcode()
279 expand(p, INAREG, "A1\n"); in zzzcode()
280 expand(p, INAREG, "mov AR,A2\n"); in zzzcode()
282 expand(p, INAREG, "mov (A2)+,(AL)+\n"); in zzzcode()
283 expand(p, INAREG, "dec A1\n"); in zzzcode()
288 p = getlr(p, '1'); in zzzcode()
289 printf("r%c", rnames[p->n_rval][1]); in zzzcode()
299 rewfld(NODE *p) in rewfld() argument
306 canaddr(NODE *p) in canaddr() argument
308 int o = p->n_op; in canaddr()
311 (o==UMUL && shumul(p->n_left, STARNM|SOREG))) in canaddr()
320 flshape(NODE *p) in flshape() argument
322 int o = p->n_op; in flshape()
326 if (o == UMUL && shumul(p->n_left, SOREG)) in flshape()
334 shtemp(NODE *p) in shtemp() argument
340 if (p->n_op == STARG ) in shtemp()
341 p = p->n_left; in shtemp()
343 switch (p->n_op) { in shtemp()
345 return (!istreg(p->n_rval)); in shtemp()
348 r = p->n_rval; in shtemp()
357 p = p->n_left; in shtemp()
358 return (p->n_op != UMUL && shtemp(p)); in shtemp()
361 if (optype(p->n_op) != LTYPE) in shtemp()
382 conput(FILE *fp, NODE *p) in conput() argument
384 int val = p->n_lval; in conput()
386 switch (p->n_op) { in conput()
389 if (p->n_name[0] != '\0') { in conput()
390 fprintf(fp, "%s", p->n_name); in conput()
393 } else if (p->n_type == LONG || p->n_type == ULONG) in conput()
400 comperr("illegal conput, p %p", p); in conput()
406 insput(NODE *p) in insput() argument
416 upput(NODE *p, int size) in upput() argument
419 switch (p->n_op) { in upput()
422 p->n_lval += size; in upput()
423 adrput(stdout, p); in upput()
424 p->n_lval -= size; in upput()
427 printf("r%c", rnames[p->n_rval][2]); in upput()
432 negcon(stdout, p->n_lval & 0177777); in upput()
435 comperr("upput bad op %d size %d", p->n_op, size); in upput()
443 adrput(FILE *io, NODE *p) in adrput() argument
447 if (p->n_op == FLD) in adrput()
448 p = p->n_left; in adrput()
450 switch (p->n_op) { in adrput()
452 if (p->n_name[0] != '\0') { in adrput()
453 fputs(p->n_name, io); in adrput()
454 if (p->n_lval != 0) in adrput()
455 fprintf(io, "+%o", (int)(p->n_lval&0177777)); in adrput()
457 negcon(io, p->n_lval); in adrput()
461 r = p->n_rval; in adrput()
462 if (p->n_name[0]) in adrput()
463 printf("%s%s", p->n_name, p->n_lval ? "+" : ""); in adrput()
466 if (p->n_lval) in adrput()
467 negcon(io, p->n_lval); in adrput()
473 fprintf(io, "(%s)", rnames[p->n_rval]); in adrput()
477 conput(io, p); in adrput()
481 switch (p->n_type) { in adrput()
484 fprintf(io, "r%c", rnames[p->n_rval][1]); in adrput()
487 fprintf(io, "%s", rnames[p->n_rval]); in adrput()
492 if (tshape(p, STARNM)) { in adrput()
494 adrput(io, p->n_left); in adrput()
499 comperr("illegal address, op %d, node %p", p->n_op, p); in adrput()
529 #define IS1CON(p) ((p)->n_op == ICON && (p)->n_lval == 1) argument
536 cvtree(NODE *p, struct interpass *ip2) in cvtree() argument
541 if (callop(p->n_op) || p->n_op == CBRANCH) in cvtree()
544 if ((p->n_op == PLUS || p->n_op == MINUS) && in cvtree()
545 IS1CON(p->n_right) && (q = p->n_left)->n_op == ASSIGN && in cvtree()
548 if ((p->n_op == PLUS && q->n_right->n_op == MINUS) || in cvtree()
549 (p->n_op == MINUS && q->n_right->n_op == PLUS)) { in cvtree()
550 nfree(p->n_right); in cvtree()
551 *p = *q->n_left; in cvtree()
552 if (optype(p->n_op) != LTYPE) in cvtree()
553 p->n_left = tcopy(p->n_left); in cvtree()
559 if (optype(p->n_op) == BITYPE) in cvtree()
560 cvtree(p->n_right, ip2); in cvtree()
561 if (optype(p->n_op) != LTYPE) in cvtree()
562 cvtree(p->n_left, ip2); in cvtree()
569 fixops(NODE *p, void *arg) in fixops() argument
573 if (!fltwritten && (p->n_type == FLOAT || p->n_type == DOUBLE)) { in fixops()
577 switch (p->n_op) { in fixops()
579 if (p->n_right->n_op == ICON) { in fixops()
580 p->n_right->n_lval = ((~p->n_right->n_lval) & 0177777); in fixops()
581 } else if (p->n_right->n_op == COMPL) { in fixops()
582 NODE *q = p->n_right->n_left; in fixops()
583 nfree(p->n_right); in fixops()
584 p->n_right = q; in fixops()
586 p->n_right = mkunode(COMPL, p->n_right, 0, p->n_type); in fixops()
589 p->n_right = mkunode(UMINUS, p->n_right, 0, p->n_right->n_type); in fixops()
590 p->n_op = LS; in fixops()
594 if (p->n_left->n_op == AND) in fixops()
595 fixops(p->n_left, 0); /* Convert an extra time */ in fixops()
639 delsconv(NODE *p, void *arg) in delsconv() argument
644 if (p->n_op != SCONV || (l = p->n_left)->n_op != OREG) in delsconv()
646 if (DEUNSIGN(p->n_type) == INT && DEUNSIGN(l->n_type) == LONG) { in delsconv()
647 p->n_op = OREG; in delsconv()
648 p->n_lval = l->n_lval; /* high word */ in delsconv()
649 p->n_rval = l->n_rval; in delsconv()
657 mycanon(NODE *p) in mycanon() argument
659 walkf(p, delsconv, 0); in mycanon()
734 argsiz(NODE *p) in argsiz() argument
736 TWORD t = p->n_type; in argsiz()
743 return attr_find(p->n_ap, ATTR_P2STRUCT)->iarg(0); in argsiz()
751 lastcall(NODE *p) in lastcall() argument
753 NODE *op = p; in lastcall()
760 p->n_qual = 0; in lastcall()
761 if (p->n_op != CALL && p->n_op != FORTCALL && p->n_op != STCALL) in lastcall()
763 for (p = p->n_right; p->n_op == CM; p = p->n_left) { in lastcall()
764 p->n_right->n_qual = 0; in lastcall()
765 size += argsiz(p->n_right); in lastcall()
767 p->n_qual = 0; in lastcall()
768 size += argsiz(p); in lastcall()
769 p = op->n_right; in lastcall()
771 if (p->n_op == CM) in lastcall()
772 p = p->n_right; in lastcall()
774 if (p->n_type == FLOAT || p->n_type == DOUBLE || in lastcall()
775 p->n_type == STRTY || p->n_type == UNIONTY) in lastcall()
784 is1con(NODE *p) in is1con() argument
786 if (p->n_op == ICON && p->n_lval == 1) in is1con()
795 special(NODE *p, int shape) in special() argument
801 s = ~p->n_lval; in special()
806 if (p->n_op == ASSIGN && p->n_right->n_op == PLUS && in special()
807 treecmp(p->n_left, p->n_right->n_left) && in special()
808 is1con(p->n_right->n_right)) in special()
812 if (p->n_op == MINUS && p->n_right->n_op == ICON && in special()
813 p->n_left->n_op == REG) in special()
817 if (p->n_op == MINUS && is1con(p->n_right)) in special()
818 return special(p->n_left, SINCB); in special()
836 myxasm(struct interpass *ip, NODE *p) in myxasm() argument
842 fldexpand(NODE *p, int cookie, char **cp) in fldexpand() argument