aboutsummaryrefslogtreecommitdiff
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
commit3acddba2ec9ec2b6e8e9f6b9b6843d3780587bfe (patch)
tree3dc9d51e95fae95d500c3a184a983038d3bbdc86 /src/cmd/5l
parent27cb23ceb191074216f462b521dd67380eebed75 (diff)
downloadgo-3acddba2ec9ec2b6e8e9f6b9b6843d3780587bfe.tar.xz
cmd/5l: fix handling of RET.EQ in wrapper function
Keith is too clever for me. R=ken2 CC=golang-dev, khr https://golang.org/cl/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 0bd76040d3..fb70599b51 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;