Commit 1620023d authored by Kai Backman's avatar Kai Backman

fix float <-> int64 conversions

R=rsc
APPROVED=rsc
DELTA=25  (25 added, 0 deleted, 0 changed)
OCL=35566
CL=35574
parent 5743fb59
...@@ -89,3 +89,5 @@ func int64div(int64, int64) int64 ...@@ -89,3 +89,5 @@ func int64div(int64, int64) int64
func uint64div(uint64, uint64) uint64 func uint64div(uint64, uint64) uint64
func int64mod(int64, int64) int64 func int64mod(int64, int64) int64
func uint64mod(uint64, uint64) uint64 func uint64mod(uint64, uint64) uint64
func float64toint64(float64) int64
func int64tofloat64(int64) float64
...@@ -713,6 +713,16 @@ walkexpr(Node **np, NodeList **init) ...@@ -713,6 +713,16 @@ walkexpr(Node **np, NodeList **init)
case OCONV: case OCONV:
case OCONVNOP: 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); walkexpr(&n->left, init);
goto ret; goto ret;
......
...@@ -142,6 +142,12 @@ _f2v(Vlong *y, float f) ...@@ -142,6 +142,12 @@ _f2v(Vlong *y, float f)
_d2v(y, f); _d2v(y, f);
} }
void
sys·float64toint64(double d, Vlong y)
{
_d2v(&y, d);
}
double double
_v2d(Vlong x) _v2d(Vlong x)
{ {
...@@ -162,6 +168,13 @@ _v2f(Vlong x) ...@@ -162,6 +168,13 @@ _v2f(Vlong x)
return _v2d(x); return _v2d(x);
} }
void
sys·int64tofloat64(Vlong y, double d)
{
d = _v2d(y);
}
static void static void
dodiv(Vlong num, Vlong den, Vlong *q, Vlong *r) dodiv(Vlong num, Vlong den, Vlong *q, Vlong *r)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment