summaryrefslogtreecommitdiff
path: root/src/cmd/5g/ggen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/5g/ggen.c')
-rw-r--r--src/cmd/5g/ggen.c113
1 files changed, 1 insertions, 112 deletions
diff --git a/src/cmd/5g/ggen.c b/src/cmd/5g/ggen.c
index a3306b44f..abd44e51b 100644
--- a/src/cmd/5g/ggen.c
+++ b/src/cmd/5g/ggen.c
@@ -536,118 +536,7 @@ no:
}
int
-gen_as_init(Node *nr, Node *nl)
+gen_as_init(Node *n)
{
- Node nam, nod1;
- Prog *p;
-
- if(!initflag)
- goto no;
-
- if(nr == N) {
- if(!stataddr(&nam, nl))
- goto no;
- if(nam.class != PEXTERN)
- goto no;
- return 1;
- }
-
- if(nr->op == OCOMPSLICE) {
- // create a slice pointing to an array
- if(!stataddr(&nam, nl)) {
- dump("stataddr", nl);
- goto no;
- }
-
- p = gins(ADATA, &nam, nr->left);
- p->reg = types[tptr]->width;
- p->to.type = D_CONST;
-//print("%P\n", p);
-
- nodconst(&nod1, types[TINT32], nr->left->type->bound);
- p = gins(ADATA, &nam, &nod1);
- p->reg = types[TINT32]->width;
- p->from.offset += types[tptr]->width;
-//print("%P\n", p);
-
- p = gins(ADATA, &nam, &nod1);
- p->reg = types[TINT32]->width;
- p->from.offset += types[tptr]->width+types[TINT32]->width;
-
- goto yes;
- }
-
- if(nr->op == OCOMPMAP) {
- goto yes;
- }
-
- if(nr->type == T ||
- !eqtype(nl->type, nr->type))
- goto no;
-
- if(!stataddr(&nam, nl))
- goto no;
- if(nam.class != PEXTERN)
- goto no;
-
- switch(nr->op) {
- default:
- goto no;
-
- case OLITERAL:
- goto lit;
- }
-
-no:
return 0;
-
-lit:
- switch(nr->type->etype) {
- default:
- goto no;
-
- case TBOOL:
- if(memcmp(nam.sym->name, "initdoneĀ·", 9) == 0)
- goto no;
- case TINT8:
- case TUINT8:
- case TINT16:
- case TUINT16:
- case TINT32:
- case TUINT32:
- case TINT64:
- case TUINT64:
- case TINT:
- case TUINT:
- case TFLOAT32:
- case TFLOAT64:
- case TFLOAT:
- p = gins(ADATA, &nam, nr);
- p->reg = nr->type->width;
- break;
-
- case TSTRING:
- p = gins(ADATA, &nam, N);
- datastring(nr->val.u.sval->s, nr->val.u.sval->len, &p->to);
- p->reg = types[tptr]->width;
- p->to.type = D_CONST;
-//print("%P\n", p);
-
- nodconst(&nod1, types[TINT32], nr->val.u.sval->len);
- p = gins(ADATA, &nam, &nod1);
- p->reg = types[TINT32]->width;
- p->from.offset += types[tptr]->width;
-//print("%P\n", p);
-
- p = gins(ADATA, &nam, &nod1);
- p->reg = types[TINT32]->width;
- p->from.offset += types[tptr]->width+types[TINT32]->width;
- break;
- }
-
-yes:
-//dump("\ngen_as_init", nl);
-//dump("", nr);
-//print("%P\n", p);
- return 1;
}