Commit 0eaea601 authored by Dave Cheney's avatar Dave Cheney

runtime: convert int64tofloat64, uint64tofloat64 to Go

I noticed that 5g doesn't flush the float64 result back to the stack, hence the change in the function signature. I'm wondering if I should also change the signature for the other two functions.

LGTM=rsc
R=minux, josharian, rsc
CC=golang-codereviews
https://golang.org/cl/132990044
parent 90653d78
......@@ -29,17 +29,33 @@ package runtime
import "unsafe"
func float64toint64(d float64, y uint64) {
const (
sign64 = 1 << (64 - 1)
)
func float64toint64(d float64) (y uint64) {
_d2v(&y, d)
return
}
func float64touint64(d float64, y uint64) {
func float64touint64(d float64) (y uint64) {
_d2v(&y, d)
return
}
const (
sign64 = 1 << (64 - 1)
)
func int64tofloat64(y int64) float64 {
if y < 0 {
return -uint64tofloat64(-uint64(y))
}
return uint64tofloat64(uint64(y))
}
func uint64tofloat64(y uint64) float64 {
hi := float64(uint32(y >> 32))
lo := float64(uint32(y))
d := hi*(1<<32) + lo
return d
}
func _d2v(y *uint64, d float64) {
x := *(*uint64)(unsafe.Pointer(&d))
......
......@@ -159,20 +159,6 @@ _v2f(Vlong x)
return _v2d(x);
}
void
runtime·int64tofloat64(Vlong y, double d)
{
d = _v2d(y);
USED(&d); // FLUSH
}
void
runtime·uint64tofloat64(Vlong y, double d)
{
d = _ul2d(y.hi)*4294967296. + _ul2d(y.lo);
USED(&d); // FLUSH
}
static void
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