mirror of https://github.com/golang/go.git
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
This commit is contained in:
parent
90653d7864
commit
0eaea6010a
|
|
@ -29,18 +29,34 @@ package runtime
|
|||
|
||||
import "unsafe"
|
||||
|
||||
func float64toint64(d float64, y uint64) {
|
||||
_d2v(&y, d)
|
||||
}
|
||||
|
||||
func float64touint64(d float64, y uint64) {
|
||||
_d2v(&y, d)
|
||||
}
|
||||
|
||||
const (
|
||||
sign64 = 1 << (64 - 1)
|
||||
)
|
||||
|
||||
func float64toint64(d float64) (y uint64) {
|
||||
_d2v(&y, d)
|
||||
return
|
||||
}
|
||||
|
||||
func float64touint64(d float64) (y uint64) {
|
||||
_d2v(&y, d)
|
||||
return
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue