summaryrefslogtreecommitdiff
path: root/src/cmd/6g/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/6g/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/6g/ggen.c')
-rw-r--r--src/cmd/6g/ggen.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/cmd/6g/ggen.c b/src/cmd/6g/ggen.c
index 140020fda..10cd58293 100644
--- a/src/cmd/6g/ggen.c
+++ b/src/cmd/6g/ggen.c
@@ -142,8 +142,8 @@ ginscall(Node *f, int proc)
break;
case 1: // call in new proc (go)
- case 2: // defered call (defer)
- nodreg(&reg, types[TINT64], D_AX);
+ case 2: // deferred call (defer)
+ nodreg(&reg, types[TINT64], D_CX);
gins(APUSHQ, f, N);
nodconst(&con, types[TINT32], argsize(f->type));
gins(APUSHQ, &con, N);
@@ -156,6 +156,11 @@ ginscall(Node *f, int proc)
}
gins(APOPQ, N, &reg);
gins(APOPQ, N, &reg);
+ if(proc == 2) {
+ nodreg(&reg, types[TINT64], D_AX);
+ gins(ATESTQ, &reg, &reg);
+ patch(gbranch(AJNE, T), pret);
+ }
break;
}
}