1
0
mirror of https://github.com/golang/go synced 2024-11-22 02:44:39 -07:00

fix float <-> int64 conversions

R=rsc
APPROVED=rsc
DELTA=25  (25 added, 0 deleted, 0 changed)
OCL=35566
CL=35574
This commit is contained in:
Kai Backman 2009-10-10 22:06:26 -07:00
parent 5743fb594f
commit 1620023d03
3 changed files with 25 additions and 0 deletions

View File

@ -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

View File

@ -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;

View File

@ -142,6 +142,12 @@ _f2v(Vlong *y, float f)
_d2v(y, f);
}
void
sys·float64toint64(double d, Vlong y)
{
_d2v(&y, d);
}
double
_v2d(Vlong x)
{
@ -162,6 +168,13 @@ _v2f(Vlong x)
return _v2d(x);
}
void
sys·int64tofloat64(Vlong y, double d)
{
d = _v2d(y);
}
static void
dodiv(Vlong num, Vlong den, Vlong *q, Vlong *r)
{