diff options
author | Shenghou Ma <minux@golang.org> | 2014-08-15 15:31:54 -0400 |
---|---|---|
committer | Shenghou Ma <minux@golang.org> | 2014-08-15 15:31:54 -0400 |
commit | a78e6cc8d5fffdc680350684a9c0d92d4eaf6328 (patch) | |
tree | c91593e0b5286fac5acbfebe023daf8a92aa18e2 | |
parent | 820abe2364e4469bee248143a379a63622091fbb (diff) | |
download | go-a78e6cc8d5fffdc680350684a9c0d92d4eaf6328.tar.gz |
[dev.power64] liblink: fix g->panicwrap update code generation
LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://codereview.appspot.com/123400043
-rw-r--r-- | src/liblink/obj9.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/liblink/obj9.c b/src/liblink/obj9.c index 3405fce47..28793676c 100644 --- a/src/liblink/obj9.c +++ b/src/liblink/obj9.c @@ -512,6 +512,36 @@ addstacksplit(Link *ctxt, LSym *cursym) p->to.type = D_BRANCH; break; } + if(cursym->text->reg & WRAPPER) { + // g->panicwrap -= autosize; + // MOVWZ panicwrap_offset(g), R3 + // ADD $-autosize, R3 + // MOVWZ R3, panicwrap_offset(g) + p->as = AMOVWZ; + p->from.type = D_OREG; + p->from.reg = REGG; + p->from.offset = 2*ctxt->arch->ptrsize; + p->to.type = D_REG; + p->to.reg = 3; + p = appendp(ctxt, p); + + p->as = AADD; + p->from.type = D_CONST; + p->from.offset = -autosize; + p->to.type = D_REG; + p->to.reg = 3; + p = appendp(ctxt, p); + + p->as = AMOVWZ; + p->from.type = D_REG; + p->from.reg = 3; + p->to.type = D_OREG; + p->to.reg = REGG; + p->to.offset = 2*ctxt->arch->ptrsize; + p = appendp(ctxt, p); + + p->as = ARETURN; + } if(cursym->text->mark & LEAF) { if(!autosize) { p->as = ABR; |