diff options
author | Ken Thompson <ken@golang.org> | 2010-03-09 12:49:24 -0800 |
---|---|---|
committer | Ken Thompson <ken@golang.org> | 2010-03-09 12:49:24 -0800 |
commit | b129670ca135bd6be7b4afcadeb0bcec0675789e (patch) | |
tree | 4e5f22c966654acdf90e8c3a69c56b0394bcfe65 /src/cmd/gc/walk.c | |
parent | de5d91c7acfd1deca9bf01eb944b2704b83b8899 (diff) | |
download | golang-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.c | 15 |
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) |