static struct symtab * addstr(char *n) { NODE *p = block(NAME, NIL, NIL, FLOAT, 0, 0); struct symtab *sp; NODE *q; struct attr *ap; struct rstack *rp; extern struct rstack *rpole; p->n_type = ctype(ULONGLONG); rpole = rp = bstruct(NULL, STNAME, NULL); soumemb(p, loti, 0); soumemb(p, hiti, 0); q = dclstruct(rp); sp = q->n_sp = lookup(addname(n), 0); defid(q, TYPEDEF); ap = attr_new(GCC_ATYP_MODE, 3); ap->sarg(0) = addname("TI"); ap->iarg(1) = 0; sp->sap = attr_add(sp->sap, ap); nfree(q); nfree(p); return sp; }
void bjobcode(void) { struct symtab *sp; struct rstack *rp; NODE *p, *q; char *c; /* amd64 names for some asm constant printouts */ astypnames[INT] = astypnames[UNSIGNED] = "\t.long"; astypnames[LONG] = astypnames[ULONG] = "\t.quad"; gp_offset = addname("gp_offset"); fp_offset = addname("fp_offset"); overflow_arg_area = addname("overflow_arg_area"); reg_save_area = addname("reg_save_area"); rp = bstruct(NULL, STNAME, NULL); p = block(NAME, NIL, NIL, UNSIGNED, 0, 0); soumemb(p, gp_offset, 0); soumemb(p, fp_offset, 0); p->n_type = VOID+PTR; p->n_ap = NULL; soumemb(p, overflow_arg_area, 0); soumemb(p, reg_save_area, 0); nfree(p); q = dclstruct(rp); c = addname("__builtin_va_list"); p = block(LB, bdty(NAME, c), bcon(1), INT, 0, 0); p = tymerge(q, p); p->n_sp = lookup(c, 0); defid(p, TYPEDEF); nfree(q); nfree(p); /* for the static varargs functions */ #define MKN(vn, rn, tp) \ { vn = addname(rn); sp = lookup(vn, SNORMAL); \ sp->sclass = USTATIC; sp->stype = tp; } MKN(gpnext, "__pcc_gpnext", FTN|LONG); MKN(fpnext, "__pcc_fpnext", FTN|DOUBLE); MKN(_1regref, "__pcc_1regref", FTN|VOID|(PTR<<TSHIFT)); MKN(_2regref, "__pcc_2regref", FTN|VOID|(PTR<<TSHIFT)); MKN(memref, "__pcc_memref", FTN|VOID|(PTR<<TSHIFT)); }