    {-# LINE 1 "libraries/base/System/CPUTime.hsc" #-}
    {-# LANGUAGE Trustworthy #-}
    {-# LANGUAGE CPP, CApiFFI #-}

    -----------------------------------------------------------------------------
    -- |
    -- Module      :  System.CPUTime
    -- Copyright   :  (c) The University of Glasgow 2001
    -- License     :  BSD-style (see the file libraries/base/LICENSE)
    --
    -- Maintainer  :  libraries@haskell.org
    -- Stability   :  provisional
    -- Portability :  portable
    --
    -- The standard CPUTime library.
    --
    -----------------------------------------------------------------------------

    -- For various _POSIX_* #defines

    {-# LINE 23 "libraries/base/System/CPUTime.hsc" #-}

    {-# LINE 25 "libraries/base/System/CPUTime.hsc" #-}

    module System.CPUTime
        ( getCPUTime
        , cpuTimePrecision
        ) where

    import System.IO.Unsafe (unsafePerformIO)

    -- Here is where we decide which backend to use

    {-# LINE 44 "libraries/base/System/CPUTime.hsc" #-}
    import qualified System.CPUTime.Posix.RUsage as I

    -- @getrusage()@ is right royal pain to deal with when targeting multiple
    -- versions of Solaris, since some versions supply it in libc (2.3 and 2.5),
    -- while 2.4 has got it in libucb (I wouldn't be too surprised if it was back
    -- again in libucb in 2.6..)
    --
    -- Avoid the problem by resorting to times() instead.

    {-# LINE 58 "libraries/base/System/CPUTime.hsc" #-}

    -- | The 'cpuTimePrecision' constant is the smallest measurable difference
    -- in CPU time that the implementation can record, and is given as an
    -- integral number of picoseconds.
    cpuTimePrecision :: Integer
    cpuTimePrecision :: Integer
    cpuTimePrecision = IO Integer -> Integer
    forall a. IO a -> a
    unsafePerformIO IO Integer
    I.getCpuTimePrecision
    {-# NOINLINE cpuTimePrecision #-}

    -- | Computation 'getCPUTime' returns the number of picoseconds CPU time
    -- used by the current program.  The precision of this result is
    -- implementation-dependent.
    getCPUTime :: IO Integer
    getCPUTime :: IO Integer
    getCPUTime = IO Integer
    I.getCPUTime