diff options
author | Russ Cox <rsc@golang.org> | 2009-09-17 19:15:54 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-09-17 19:15:54 -0700 |
commit | 66faa8ea80cda530644b4a12712eead17d1b9f3b (patch) | |
tree | d53c65e13bedaabc25a73358a06c5a641c033c00 /src/cmd/5g/gobj.c | |
parent | 4e382ea1719742f9e8a88632de4eb968cf97de36 (diff) | |
download | golang-66faa8ea80cda530644b4a12712eead17d1b9f3b.tar.gz |
move static init code from 6g into gc.
hook up to 8g and 5g too.
R=ken
OCL=34768
CL=34768
Diffstat (limited to 'src/cmd/5g/gobj.c')
-rw-r--r-- | src/cmd/5g/gobj.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/cmd/5g/gobj.c b/src/cmd/5g/gobj.c index 99855c0da..2a336a288 100644 --- a/src/cmd/5g/gobj.c +++ b/src/cmd/5g/gobj.c @@ -477,6 +477,44 @@ datagostring(Strlit *sval, Addr *a) text(); } +void +gdata(Node *nam, Node *nr, int wid) +{ + Prog *p; + vlong v; + + if(wid == 8 && is64(nr->type)) { + v = mpgetfix(nr->val.u.xval); + p = gins(ADATA, nam, nodintconst(v)); + p->reg = 4; + p = gins(ADATA, nam, nodintconst(v>>32)); + p->reg = 4; + p->from.offset += 4; + return; + } + p = gins(ADATA, nam, nr); + p->reg = wid; +} + +void +gdatastring(Node *nam, Strlit *sval) +{ + Prog *p; + Node nod1; + + p = gins(ADATA, nam, N); + datastring(sval->s, sval->len, &p->to); + p->reg = types[tptr]->width; + p->to.type = D_CONST; + p->to.etype = TINT32; +//print("%P\n", p); + + nodconst(&nod1, types[TINT32], sval->len); + p = gins(ADATA, nam, &nod1); + p->reg = types[TINT32]->width; + p->from.offset += types[tptr]->width; +} + int dstringptr(Sym *s, int off, char *str) { |