- marr <- primNewByteArray (sizeof_int * 4)
- ptr <- CCALL(getCPUTime) marr
- if (ptr /= nullAddr) then do
- x0 <- primReadIntArray marr 0
- x1 <- primReadIntArray marr 1
- x2 <- primReadIntArray marr 2
- x3 <- primReadIntArray marr 3
- return ((fromIntegral x0 * 1000000000 + fromIntegral x1 +
- fromIntegral x2 * 1000000000 + fromIntegral x3)
- * 1000)
- else
- ioError (IOError Nothing UnsupportedOperation
- "getCPUTime"
- "can't get CPU time")
-
-#else
-
-getCPUTime :: IO Integer
-getCPUTime =
- stToIO (newIntArray ((0::Int),3)) >>= \ marr ->
- stToIO (unsafeFreezeByteArray marr) >>= \ barr@(ByteArray _ frozen#) ->
- _ccall_ getCPUTime barr >>= \ ptr ->
- if (ptr::Addr) /= ``NULL'' then
+ marr <- stToIO (newIntArray ((0::Int),3))
+ barr <- stToIO (unsafeFreezeByteArray marr)
+ rc <- primGetCPUTime barr
+ if rc /= 0 then
+ case barr of
+ ByteArray _ _ frozen# -> -- avoid bounds checking