]> Cypherpunks repositories - gostls13.git/commitdiff
add sys.float32bits, sys.float64bits
authorRob Pike <r@golang.org>
Thu, 6 Nov 2008 23:48:36 +0000 (15:48 -0800)
committerRob Pike <r@golang.org>
Thu, 6 Nov 2008 23:48:36 +0000 (15:48 -0800)
R=rsc
DELTA=21  (21 added, 0 deleted, 0 changed)
OCL=18709
CL=18718

src/cmd/gc/sys.go
src/cmd/gc/sysimport.c
src/runtime/runtime.c

index 0ee9deb51bc743ce1420e7d3a53d978bef7488e7..72e36a0c7588cffae39c7baada873c267a1176f3 100644 (file)
@@ -49,6 +49,8 @@ export func   isInf(float64, int) bool;               // test for infinity
 export func    isNaN(float64) bool;                    // test for not-a-number
 export func    Inf(int) float64;                       // return signed Inf
 export func    NaN() float64;                          // return a NaN
+export func    float32bits(float32) uint32;            // raw bits
+export func    float64bits(float64) uint64;            // raw bits
 
 export func    newmap(keysize int, valsize int,
                        keyalg int, valalg int,
index 02b5a86e814ced00f836fcd85c275f22c890b99e..9ee99a1892da8c016649c6ae300aaee647521f8f 100644 (file)
@@ -39,6 +39,8 @@ char *sysimport =
        "export func sys.isNaN (? float64) (? bool)\n"
        "export func sys.Inf (? int) (? float64)\n"
        "export func sys.NaN () (? float64)\n"
+       "export func sys.float32bits (? float32) (? uint32)\n"
+       "export func sys.float64bits (? float64) (? uint64)\n"
        "export func sys.newmap (keysize int, valsize int, keyalg int, valalg int, hint int) (hmap *map[any] any)\n"
        "export func sys.mapaccess1 (hmap *map[any] any, key any) (val any)\n"
        "export func sys.mapaccess2 (hmap *map[any] any, key any) (val any, pres bool)\n"
index db31b77df3839a85134cade91c99d0160bef204b..a0d97dcda9049202310ce5bc1b5a080ba7cb9ad2 100644 (file)
@@ -347,6 +347,23 @@ sys·NaN(float64 out)
        FLUSH(&out);
 }
 
+// func float32bits(float32) uint32; // raw bits of float32
+void
+sys·float32bits(float32 din, uint32 iou)
+{
+       iou = *(uint32*)&din;
+       FLUSH(&iou);
+}
+
+// func float64bits(float64) uint64; // raw bits of float64
+void
+sys·float64bits(float64 din, uint64 iou)
+{
+       iou = *(uint64*)&din;
+       FLUSH(&iou);
+}
+
+
 static int32   argc;
 static uint8** argv;
 static int32   envc;