summaryrefslogtreecommitdiff
path: root/src/cmd/gc/walk.c
diff options
context:
space:
mode:
authorKen Thompson <ken@golang.org>2010-03-09 12:49:24 -0800
committerKen Thompson <ken@golang.org>2010-03-09 12:49:24 -0800
commitb129670ca135bd6be7b4afcadeb0bcec0675789e (patch)
tree4e5f22c966654acdf90e8c3a69c56b0394bcfe65 /src/cmd/gc/walk.c
parentde5d91c7acfd1deca9bf01eb944b2704b83b8899 (diff)
downloadgolang-b129670ca135bd6be7b4afcadeb0bcec0675789e.tar.gz
identical complex implementation
for 6g and 8g. can also be used for 5g. 5g is still a stub. R=rsc CC=golang-dev http://codereview.appspot.com/362041
Diffstat (limited to 'src/cmd/gc/walk.c')
-rw-r--r--src/cmd/gc/walk.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c
index ab4f946bd..65ab491f6 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -851,13 +851,22 @@ walkexpr(Node **np, NodeList **init)
case ODIV:
case OMOD:
+ walkexpr(&n->left, init);
+ walkexpr(&n->right, init);
+ /*
+ * rewrite complex div into function call.
+ */
+ et = n->left->type->etype;
+ if(iscomplex[et] && n->op == ODIV) {
+ n = mkcall("complex128div", n->type, init,
+ conv(n->left, types[TCOMPLEX128]),
+ conv(n->right, types[TCOMPLEX128]));
+ goto ret;
+ }
/*
* rewrite div and mod into function calls
* on 32-bit architectures.
*/
- walkexpr(&n->left, init);
- walkexpr(&n->right, init);
- et = n->left->type->etype;
if(widthptr > 4 || (et != TUINT64 && et != TINT64))
goto ret;
if(et == TINT64)