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:
parent
5743fb594f
commit
1620023d03
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user