[project @ 1996-01-11 14:06:51 by partain]
[ghc-hetmet.git] / ghc / lib / haskell-1.3 / LibCPUTime.lhs
index c3db93e..5cba859 100644 (file)
@@ -10,12 +10,14 @@ import PreludeGlaST
 
 getCPUTime :: IO Integer
 getCPUTime =
-    _ccall_ getCPUTime                             `thenPrimIO` \ ptr@(A# ptr#) ->
-    if ptr /= ``NULL'' then
-        return (fromInt (I# (indexIntOffAddr# ptr# 0#)) * 1000000000 + 
-                fromInt (I# (indexIntOffAddr# ptr# 1#)) + 
-               fromInt (I# (indexIntOffAddr# ptr# 2#)) * 1000000000 + 
-                fromInt (I# (indexIntOffAddr# ptr# 3#)))
+    newIntArray (0,3)                              `thenPrimIO` \ marr ->
+    unsafeFreezeByteArray marr                     `thenPrimIO` \ barr@(_ByteArray _ frozen#) ->
+    _ccall_ getCPUTime barr                        `thenPrimIO` \ ptr ->
+    if (ptr::_Addr) /= ``NULL'' then
+        return (fromInt (I# (indexIntArray# frozen# 0#)) * 1000000000 + 
+                fromInt (I# (indexIntArray# frozen# 1#)) + 
+               fromInt (I# (indexIntArray# frozen# 2#)) * 1000000000 + 
+                fromInt (I# (indexIntArray# frozen# 3#)))
     else
        failWith (UnsupportedOperation "can't get CPU time")
 
@@ -29,3 +31,4 @@ implementation-dependent.