mirror of
https://github.com/golang/go
synced 2024-11-20 11:14: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;
|
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
|
void
|
||||||
gused(Node *n)
|
gused(Node *n)
|
||||||
{
|
{
|
||||||
|
@ -172,44 +172,6 @@ newplist(void)
|
|||||||
return pl;
|
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
|
void
|
||||||
gused(Node *n)
|
gused(Node *n)
|
||||||
{
|
{
|
||||||
|
@ -173,44 +173,6 @@ newplist(void)
|
|||||||
return pl;
|
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
|
void
|
||||||
gused(Node *n)
|
gused(Node *n)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user