return;
}
if(n->type->width > widthptr)
- tempalloc(n1, n->type);
+ tempname(n1, n->type);
else
regalloc(n1, n->type, rg);
cgen(n, n1);
void
mfree(Node *n)
{
- if(n->ostk)
- tempfree(n);
- else if(n->op == OREGISTER)
+ if(n->op == OREGISTER)
regfree(n);
}
if(nr->addable) {
agenr(nl, &n3, res);
if(!isconst(nr, CTINT)) {
- tempalloc(&tmp, types[TINT32]);
+ tempname(&tmp, types[TINT32]);
cgen(nr, &tmp);
regalloc(&n1, tmp.type, N);
gmove(&tmp, &n1);
- tempfree(&tmp);
}
} else if(nl->addable) {
if(!isconst(nr, CTINT)) {
- tempalloc(&tmp, types[TINT32]);
+ tempname(&tmp, types[TINT32]);
cgen(nr, &tmp);
regalloc(&n1, tmp.type, N);
gmove(&tmp, &n1);
- tempfree(&tmp);
}
regalloc(&n3, types[tptr], res);
agen(nl, &n3);
} else {
- tempalloc(&tmp, types[TINT32]);
+ tempname(&tmp, types[TINT32]);
cgen(nr, &tmp);
nr = &tmp;
agenr(nl, &n3, res);
regalloc(&n1, tmp.type, N);
gins(optoas(OAS, tmp.type), &tmp, &n1);
- tempfree(&tmp);
}
// &a is in &n3 (allocated in res)
{
Node n1;
- tempalloc(&n1, types[tptr]);
+ tempname(&n1, types[tptr]);
agen(n, &n1);
regalloc(a, types[tptr], res);
gmove(&n1, a);
- tempfree(&n1);
}
/*
if(is64(nr->type)) {
if(!nl->addable) {
- tempalloc(&n1, nl->type);
+ tempname(&n1, nl->type);
cgen(nl, &n1);
nl = &n1;
}
if(!nr->addable) {
- tempalloc(&n2, nr->type);
+ tempname(&n2, nr->type);
cgen(nr, &n2);
nr = &n2;
}
cmp64(nl, nr, a, to);
- if(nr == &n2)
- tempfree(&n2);
- if(nl == &n1)
- tempfree(&n1);
break;
}
l = n->left;
if(!l->addable) {
- tempalloc(&t1, l->type);
+ tempname(&t1, l->type);
cgen(l, &t1);
l = &t1;
}
// setup for binary operators
r = n->right;
if(r != N && !r->addable) {
- tempalloc(&t2, r->type);
+ tempname(&t2, r->type);
cgen(r, &t2);
r = &t2;
}
splitclean();
//out:
- if(r == &t2)
- tempfree(&t2);
- if(l == &t1)
- tempfree(&t1);
regfree(&al);
regfree(&ah);
}
void gclean(void);
void regalloc(Node*, Type*, Node*);
void regfree(Node*);
-void tempalloc(Node*, Type*);
-void tempfree(Node*);
Node* nodarg(Type*, int);
void nodreg(Node*, Type*, int);
void nodindreg(Node*, Type*, int);
reg[i]--;
}
-void
-tempalloc(Node *n, Type *t)
-{
- int w;
-
- dowidth(t);
-
- memset(n, 0, sizeof(*n));
- n->op = ONAME;
- n->sym = S;
- n->type = t;
- n->etype = t->etype;
- n->class = PAUTO;
- n->addable = 1;
- n->ullman = 1;
- n->noescape = 1;
- n->ostk = stksize;
-
- w = t->width;
- stksize += w;
- stksize = rnd(stksize, w);
- n->xoffset = -stksize;
-//print("tempalloc %d -> %d from %p\n", n->ostk, n->xoffset, __builtin_return_address(0));
- if(stksize > maxstksize)
- maxstksize = stksize;
-}
-
-void
-tempfree(Node *n)
-{
-//print("tempfree %d\n", n->xoffset);
- if(n->xoffset != -stksize)
- fatal("tempfree %lld %d", -n->xoffset, stksize);
- stksize = n->ostk;
-}
-
/*
* initialize n to be register r of type t.
*/