]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: convert int64tofloat64, uint64tofloat64 to Go
authorDave Cheney <dave@cheney.net>
Tue, 26 Aug 2014 05:39:04 +0000 (05:39 +0000)
committerDave Cheney <dave@cheney.net>
Tue, 26 Aug 2014 05:39:04 +0000 (05:39 +0000)
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

src/pkg/runtime/vlrt.go
src/pkg/runtime/vlrt_arm.c

index 64154fce08d765fba2c07d8e41bbfb622042e043..c346812aec9d4a3e9b90b41a4cd78b4d061c03e2 100644 (file)
@@ -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 float64y 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))
index 5e7807f4557f80d8f9d828bc9911908a7c838418..b342a3eb86af92420a9f84871cb345a710040d28 100644 (file)
@@ -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)
 {