mirror of
https://github.com/golang/go
synced 2024-11-20 09:44:45 -07:00
cmd/5g, cmd/6g, cmd/8g: delete clearstk
Dreg from https://golang.org/cl/4629042 R=ken2 CC=golang-dev https://golang.org/cl/6259057
This commit is contained in:
parent
935d8d16d4
commit
96b0594833
@ -174,64 +174,6 @@ newplist(void)
|
||||
return pl;
|
||||
}
|
||||
|
||||
void
|
||||
clearstk(void)
|
||||
{
|
||||
Plist *pl;
|
||||
Prog *p, *p1, *p2, *p3;
|
||||
Node dst, end, zero, con;
|
||||
|
||||
if(plast->firstpc->to.offset <= 0)
|
||||
return;
|
||||
|
||||
// reestablish context for inserting code
|
||||
// at beginning of function.
|
||||
pl = plast;
|
||||
p1 = pl->firstpc;
|
||||
p2 = p1->link;
|
||||
pc = mal(sizeof(*pc));
|
||||
clearp(pc);
|
||||
p1->link = pc;
|
||||
|
||||
// zero stack frame
|
||||
|
||||
// MOVW $4(SP), R1
|
||||
nodreg(&dst, types[tptr], 1);
|
||||
p = gins(AMOVW, N, &dst);
|
||||
p->from.type = D_CONST;
|
||||
p->from.reg = REGSP;
|
||||
p->from.offset = 4;
|
||||
|
||||
// MOVW $n(R1), R2
|
||||
nodreg(&end, types[tptr], 2);
|
||||
p = gins(AMOVW, N, &end);
|
||||
p->from.type = D_CONST;
|
||||
p->from.reg = 1;
|
||||
p->from.offset = p1->to.offset;
|
||||
|
||||
// MOVW $0, R3
|
||||
nodreg(&zero, types[TUINT32], 3);
|
||||
nodconst(&con, types[TUINT32], 0);
|
||||
gmove(&con, &zero);
|
||||
|
||||
// L:
|
||||
// MOVW.P R3, 0(R1) +4
|
||||
// CMP R1, R2
|
||||
// BNE L
|
||||
p = gins(AMOVW, &zero, &dst);
|
||||
p->to.type = D_OREG;
|
||||
p->to.offset = 4;
|
||||
p->scond |= C_PBIT;
|
||||
p3 = p;
|
||||
p = gins(ACMP, &dst, N);
|
||||
raddr(&end, p);
|
||||
patch(gbranch(ABNE, T, 0), p3);
|
||||
|
||||
// continue with original code.
|
||||
gins(ANOP, N, N)->link = p2;
|
||||
pc = P;
|
||||
}
|
||||
|
||||
void
|
||||
gused(Node *n)
|
||||
{
|
||||
|
@ -172,44 +172,6 @@ newplist(void)
|
||||
return pl;
|
||||
}
|
||||
|
||||
void
|
||||
clearstk(void)
|
||||
{
|
||||
Plist *pl;
|
||||
Prog *p1, *p2;
|
||||
Node sp, di, cx, con, ax;
|
||||
|
||||
if((uint32)plast->firstpc->to.offset <= 0)
|
||||
return;
|
||||
|
||||
// reestablish context for inserting code
|
||||
// at beginning of function.
|
||||
pl = plast;
|
||||
p1 = pl->firstpc;
|
||||
p2 = p1->link;
|
||||
pc = mal(sizeof(*pc));
|
||||
clearp(pc);
|
||||
p1->link = pc;
|
||||
|
||||
// zero stack frame
|
||||
nodreg(&sp, types[tptr], D_SP);
|
||||
nodreg(&di, types[tptr], D_DI);
|
||||
nodreg(&cx, types[TUINT64], D_CX);
|
||||
nodconst(&con, types[TUINT64], (uint32)p1->to.offset / widthptr);
|
||||
gins(ACLD, N, N);
|
||||
gins(AMOVQ, &sp, &di);
|
||||
gins(AMOVQ, &con, &cx);
|
||||
nodconst(&con, types[TUINT64], 0);
|
||||
nodreg(&ax, types[TUINT64], D_AX);
|
||||
gins(AMOVQ, &con, &ax);
|
||||
gins(AREP, N, N);
|
||||
gins(ASTOSQ, N, N);
|
||||
|
||||
// continue with original code.
|
||||
gins(ANOP, N, N)->link = p2;
|
||||
pc = P;
|
||||
}
|
||||
|
||||
void
|
||||
gused(Node *n)
|
||||
{
|
||||
|
@ -173,44 +173,6 @@ newplist(void)
|
||||
return pl;
|
||||
}
|
||||
|
||||
void
|
||||
clearstk(void)
|
||||
{
|
||||
Plist *pl;
|
||||
Prog *p1, *p2;
|
||||
Node sp, di, cx, con, ax;
|
||||
|
||||
if(plast->firstpc->to.offset <= 0)
|
||||
return;
|
||||
|
||||
// reestablish context for inserting code
|
||||
// at beginning of function.
|
||||
pl = plast;
|
||||
p1 = pl->firstpc;
|
||||
p2 = p1->link;
|
||||
pc = mal(sizeof(*pc));
|
||||
clearp(pc);
|
||||
p1->link = pc;
|
||||
|
||||
// zero stack frame
|
||||
nodreg(&sp, types[tptr], D_SP);
|
||||
nodreg(&di, types[tptr], D_DI);
|
||||
nodreg(&cx, types[TUINT32], D_CX);
|
||||
nodconst(&con, types[TUINT32], p1->to.offset / widthptr);
|
||||
gins(ACLD, N, N);
|
||||
gins(AMOVL, &sp, &di);
|
||||
gins(AMOVL, &con, &cx);
|
||||
nodconst(&con, types[TUINT32], 0);
|
||||
nodreg(&ax, types[TUINT32], D_AX);
|
||||
gins(AMOVL, &con, &ax);
|
||||
gins(AREP, N, N);
|
||||
gins(ASTOSL, N, N);
|
||||
|
||||
// continue with original code.
|
||||
gins(ANOP, N, N)->link = p2;
|
||||
pc = P;
|
||||
}
|
||||
|
||||
void
|
||||
gused(Node *n)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user