summaryrefslogtreecommitdiff
path: root/src/cmd/6g/gobj.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/6g/gobj.c')
-rw-r--r--src/cmd/6g/gobj.c178
1 files changed, 23 insertions, 155 deletions
diff --git a/src/cmd/6g/gobj.c b/src/cmd/6g/gobj.c
index cdbbd5d9d..a9bd5e833 100644
--- a/src/cmd/6g/gobj.c
+++ b/src/cmd/6g/gobj.c
@@ -35,10 +35,9 @@
void
zname(Biobuf *b, Sym *s, int t)
{
- Bputc(b, ANAME); /* as */
- Bputc(b, ANAME>>8); /* as */
- Bputc(b, t); /* type */
- Bputc(b, s->sym); /* sym */
+ BPUTLE2(b, ANAME); /* as */
+ BPUTC(b, t); /* type */
+ BPUTC(b, s->sym); /* sym */
Bputname(b, s);
}
@@ -46,13 +45,12 @@ zname(Biobuf *b, Sym *s, int t)
void
zfile(Biobuf *b, char *p, int n)
{
- Bputc(b, ANAME);
- Bputc(b, ANAME>>8);
- Bputc(b, D_FILE);
- Bputc(b, 1);
- Bputc(b, '<');
+ BPUTLE2(b, ANAME);
+ BPUTC(b, D_FILE);
+ BPUTC(b, 1);
+ BPUTC(b, '<');
Bwrite(b, p, n);
- Bputc(b, 0);
+ BPUTC(b, 0);
}
void
@@ -60,12 +58,8 @@ zhist(Biobuf *b, int line, vlong offset)
{
Addr a;
- Bputc(b, AHISTORY);
- Bputc(b, AHISTORY>>8);
- Bputc(b, line);
- Bputc(b, line>>8);
- Bputc(b, line>>16);
- Bputc(b, line>>24);
+ BPUTLE2(b, AHISTORY);
+ BPUTLE4(b, line);
zaddr(b, &zprog.from, 0, 0);
a = zprog.to;
if(offset != 0) {
@@ -116,54 +110,40 @@ zaddr(Biobuf *b, Addr *a, int s, int gotype)
t |= T_SCONST;
break;
}
- Bputc(b, t);
+ BPUTC(b, t);
if(t & T_INDEX) { /* implies index, scale */
- Bputc(b, a->index);
- Bputc(b, a->scale);
+ BPUTC(b, a->index);
+ BPUTC(b, a->scale);
}
if(t & T_OFFSET) { /* implies offset */
l = a->offset;
- Bputc(b, l);
- Bputc(b, l>>8);
- Bputc(b, l>>16);
- Bputc(b, l>>24);
+ BPUTLE4(b, l);
if(t & T_64) {
l = a->offset>>32;
- Bputc(b, l);
- Bputc(b, l>>8);
- Bputc(b, l>>16);
- Bputc(b, l>>24);
+ BPUTLE4(b, l);
}
}
if(t & T_SYM) /* implies sym */
- Bputc(b, s);
+ BPUTC(b, s);
if(t & T_FCONST) {
ieeedtod(&e, a->u.dval);
- l = e;
- Bputc(b, l);
- Bputc(b, l>>8);
- Bputc(b, l>>16);
- Bputc(b, l>>24);
- l = e >> 32;
- Bputc(b, l);
- Bputc(b, l>>8);
- Bputc(b, l>>16);
- Bputc(b, l>>24);
+ BPUTLE4(b, e);
+ BPUTLE4(b, e >> 32);
return;
}
if(t & T_SCONST) {
n = a->u.sval;
for(i=0; i<NSNAME; i++) {
- Bputc(b, *n);
+ BPUTC(b, *n);
n++;
}
return;
}
if(t & T_TYPE)
- Bputc(b, a->type);
+ BPUTC(b, a->type);
if(t & T_GOTYPE)
- Bputc(b, gotype);
+ BPUTC(b, gotype);
}
static struct {
@@ -269,12 +249,8 @@ dumpfuncs(void)
break;
}
- Bputc(bout, p->as);
- Bputc(bout, p->as>>8);
- Bputc(bout, p->lineno);
- Bputc(bout, p->lineno>>8);
- Bputc(bout, p->lineno>>16);
- Bputc(bout, p->lineno>>24);
+ BPUTLE2(bout, p->as);
+ BPUTLE4(bout, p->lineno);
zaddr(bout, &p->from, sf, gf);
zaddr(bout, &p->to, st, gt);
}
@@ -498,114 +474,6 @@ dsymptr(Sym *s, int off, Sym *x, int xoff)
}
void
-genembedtramp(Type *rcvr, Type *method, Sym *newnam, int iface)
-{
- Sym *e;
- int c, d, mov, add, loaded;
- int64 o;
- Prog *p;
- Type *f;
-
- USED(iface);
-
- if(0 && debug['r'])
- print("genembedtramp %T %T %S\n", rcvr, method, newnam);
-
- e = method->sym;
- for(d=0; d<nelem(dotlist); d++) {
- c = adddot1(e, rcvr, d, nil, 0);
- if(c == 1)
- goto out;
- }
- fatal("genembedtramp %T.%S", rcvr, method->sym);
-
-out:
- newplist()->name = newname(newnam);
-
- //TEXT main·S_test2(SB),7,$0
- p = pc;
- gins(ATEXT, N, N);
- p->from.type = D_EXTERN;
- p->from.sym = newnam;
- p->to.type = D_CONST;
- p->to.offset = 0;
- p->from.scale = 7;
-//print("1. %P\n", p);
-
- mov = AMOVQ;
- add = AADDQ;
- loaded = 0;
- o = 0;
- for(c=d-1; c>=0; c--) {
- f = dotlist[c].field;
- o += f->width;
- if(!isptr[f->type->etype])
- continue;
- if(!loaded) {
- loaded = 1;
- //MOVQ 8(SP), AX
- p = pc;
- gins(mov, N, N);
- p->from.type = D_INDIR+D_SP;
- p->from.offset = widthptr;
- p->to.type = D_AX;
-//print("2. %P\n", p);
- }
-
- //MOVQ o(AX), AX
- p = pc;
- gins(mov, N, N);
- p->from.type = D_INDIR+D_AX;
- p->from.offset = o;
- p->to.type = D_AX;
-//print("3. %P\n", p);
- o = 0;
- }
- if(o != 0) {
- //ADDQ $XX, AX
- p = pc;
- gins(add, N, N);
- p->from.type = D_CONST;
- p->from.offset = o;
- if(loaded)
- p->to.type = D_AX;
- else {
- p->to.type = D_INDIR+D_SP;
- p->to.offset = widthptr;
- }
-//print("4. %P\n", p);
- }
-
- //MOVQ AX, 8(SP)
- if(loaded) {
- p = pc;
- gins(mov, N, N);
- p->from.type = D_AX;
- p->to.type = D_INDIR+D_SP;
- p->to.offset = widthptr;
-//print("5. %P\n", p);
- } else {
- // TODO(rsc): obviously this is unnecessary,
- // but 6l has a bug, and it can't handle
- // JMP instructions too close to the top of
- // a new function.
- gins(ANOP, N, N);
- }
-
- f = dotlist[0].field;
- //JMP main·*Sub_test2(SB)
- if(isptr[f->type->etype])
- f = f->type;
- p = pc;
- gins(AJMP, N, N);
- p->to.type = D_EXTERN;
- p->to.sym = methodsym(method->sym, ptrto(f->type), 0);
-//print("6. %P\n", p);
-
- pc->as = ARET; // overwrite AEND
-}
-
-void
nopout(Prog *p)
{
p->as = ANOP;