summaryrefslogtreecommitdiff
path: root/src/cmd/5g/ggen.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-03-31 11:46:01 -0700
committerRuss Cox <rsc@golang.org>2010-03-31 11:46:01 -0700
commitea38be0512395c8f81417fb75ce98664d9329b9b (patch)
tree6fd09575dcc2abccf75c017828b45ddbb98c3e88 /src/cmd/5g/ggen.c
parent867aa94eb6c414512801b14f5931dc27d51cd3d4 (diff)
downloadgolang-ea38be0512395c8f81417fb75ce98664d9329b9b.tar.gz
gc: implement panic and recover
R=ken2, r, ken3 CC=golang-dev http://codereview.appspot.com/831042
Diffstat (limited to 'src/cmd/5g/ggen.c')
-rw-r--r--src/cmd/5g/ggen.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/cmd/5g/ggen.c b/src/cmd/5g/ggen.c
index 50c90912e..5831d597e 100644
--- a/src/cmd/5g/ggen.c
+++ b/src/cmd/5g/ggen.c
@@ -190,7 +190,7 @@ ginscall(Node *f, int proc)
break;
- case 2: // defered call (defer)
+ case 2: // deferred call (defer)
regalloc(&r, types[tptr], N);
p = gins(AMOVW, N, &r);
p->from.type = D_OREG;
@@ -222,7 +222,7 @@ ginscall(Node *f, int proc)
ginscall(deferproc, 0);
- regalloc(&r, types[tptr], N);
+ nodreg(&r, types[tptr], D_R1);
p = gins(AMOVW, N, &r);
p->from.type = D_OREG;
p->from.reg = REGSP;
@@ -233,8 +233,13 @@ ginscall(Node *f, int proc)
p->to.reg = REGSP;
p->to.offset = 8;
p->scond |= C_WBIT;
- regfree(&r);
-
+
+ if(proc == 2) {
+ nodconst(&con, types[TINT32], 0);
+ nodreg(&r, types[tptr], D_R0);
+ gins(ACMP, &con, &r);
+ patch(gbranch(ABNE, T), pret);
+ }
break;
}
}