diff options
Diffstat (limited to 'src/cmd')
-rw-r--r-- | src/cmd/gc/sys.go | 2 | ||||
-rw-r--r-- | src/cmd/gc/walk.c | 10 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/cmd/gc/sys.go b/src/cmd/gc/sys.go index b4c05a185..5e3632920 100644 --- a/src/cmd/gc/sys.go +++ b/src/cmd/gc/sys.go @@ -89,3 +89,5 @@ func int64div(int64, int64) int64 func uint64div(uint64, uint64) uint64 func int64mod(int64, int64) int64 func uint64mod(uint64, uint64) uint64 +func float64toint64(float64) int64 +func int64tofloat64(int64) float64 diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index abbd37335..e5aa1e726 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -713,6 +713,16 @@ walkexpr(Node **np, NodeList **init) case OCONV: case OCONVNOP: + if(thechar == '5') { + if(isfloat[n->left->type->etype] && (n->type->etype == TINT64)) { + n = mkcall("float64toint64", n->type, init, conv(n->left, types[TFLOAT64])); + goto ret; + } + if((n->left->type->etype == TINT64) && isfloat[n->type->etype]) { + n = mkcall("int64tofloat64", n->type, init, conv(n->left, types[TINT64])); + goto ret; + } + } walkexpr(&n->left, init); goto ret; |