summaryrefslogtreecommitdiff
path: root/src/cmd/5g/gobj.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-09-17 19:15:54 -0700
committerRuss Cox <rsc@golang.org>2009-09-17 19:15:54 -0700
commit66faa8ea80cda530644b4a12712eead17d1b9f3b (patch)
treed53c65e13bedaabc25a73358a06c5a641c033c00 /src/cmd/5g/gobj.c
parent4e382ea1719742f9e8a88632de4eb968cf97de36 (diff)
downloadgolang-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.c38
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)
{