summaryrefslogtreecommitdiff
path: root/src/cmd/8g/ggen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/8g/ggen.c')
-rw-r--r--src/cmd/8g/ggen.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/cmd/8g/ggen.c b/src/cmd/8g/ggen.c
index 468f67ae9..193058e20 100644
--- a/src/cmd/8g/ggen.c
+++ b/src/cmd/8g/ggen.c
@@ -182,8 +182,8 @@ ginscall(Node *f, int proc)
break;
case 1: // call in new proc (go)
- case 2: // defered call (defer)
- nodreg(&reg, types[TINT32], D_AX);
+ case 2: // deferred call (defer)
+ nodreg(&reg, types[TINT32], D_CX);
gins(APUSHL, f, N);
nodconst(&con, types[TINT32], argsize(f->type));
gins(APUSHL, &con, N);
@@ -193,6 +193,11 @@ ginscall(Node *f, int proc)
ginscall(deferproc, 0);
gins(APOPL, N, &reg);
gins(APOPL, N, &reg);
+ if(proc == 2) {
+ nodreg(&reg, types[TINT64], D_AX);
+ gins(ATESTL, &reg, &reg);
+ patch(gbranch(AJNE, T), pret);
+ }
break;
}
}