diff options
| author | Russ Cox <rsc@golang.org> | 2010-03-31 11:46:01 -0700 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2010-03-31 11:46:01 -0700 |
| commit | ea38be0512395c8f81417fb75ce98664d9329b9b (patch) | |
| tree | 6fd09575dcc2abccf75c017828b45ddbb98c3e88 /src/cmd/6g/ggen.c | |
| parent | 867aa94eb6c414512801b14f5931dc27d51cd3d4 (diff) | |
| download | golang-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.c | 9 |
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(®, types[TINT64], D_AX); + case 2: // deferred call (defer) + nodreg(®, 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, ®); gins(APOPQ, N, ®); + if(proc == 2) { + nodreg(®, types[TINT64], D_AX); + gins(ATESTQ, ®, ®); + patch(gbranch(AJNE, T), pret); + } break; } } |
