summaryrefslogtreecommitdiff
path: root/src/cmd/5l
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-09-13 03:50:50 +0000
committerRuss Cox <rsc@golang.org>2013-09-13 03:50:50 +0000
commit7c881f3b35baeb92ffbe549d92d83a9289479864 (patch)
treed54df36a7ae653da3eb5cad3eb593ab2a6375c46 /src/cmd/5l
parent7c639d70a92ce205f146e1c138cef53ed41de6ed (diff)
downloadgo-7c881f3b35baeb92ffbe549d92d83a9289479864.tar.gz
cmd/5l: fix handling of RET.EQ in wrapper function
Keith is too clever for me. R=ken2 CC=golang-dev, khr https://codereview.appspot.com/13272050
Diffstat (limited to 'src/cmd/5l')
-rw-r--r--src/cmd/5l/noop.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/cmd/5l/noop.c b/src/cmd/5l/noop.c
index 0bd76040d..fb70599b5 100644
--- a/src/cmd/5l/noop.c
+++ b/src/cmd/5l/noop.c
@@ -321,6 +321,13 @@ noops(void)
}
if(cursym->text->reg & WRAPPER) {
+ int cond;
+
+ // Preserve original RET's cond, to allow RET.EQ
+ // in the implementation of reflect.call.
+ cond = p->scond;
+ p->scond = C_SCOND_NONE;
+
// g->panicwrap -= autosize;
// MOVW panicwrap_offset(g), R3
// SUB $autosize, R3
@@ -347,6 +354,8 @@ noops(void)
p->to.reg = REGG;
p->to.offset = 2*PtrSize;
p = appendp(p);
+
+ p->scond = cond;
}
p->as = AMOVW;