summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/GHC/Data/FastMutInt.hs20
1 files changed, 13 insertions, 7 deletions
diff --git a/compiler/GHC/Data/FastMutInt.hs b/compiler/GHC/Data/FastMutInt.hs
index bc4c413bdc..e2e3a50601 100644
--- a/compiler/GHC/Data/FastMutInt.hs
+++ b/compiler/GHC/Data/FastMutInt.hs
@@ -9,7 +9,8 @@
module GHC.Data.FastMutInt(
FastMutInt, newFastMutInt,
- readFastMutInt, writeFastMutInt
+ readFastMutInt, writeFastMutInt,
+ atomicFetchAddFastMut
) where
import GHC.Prelude
@@ -27,15 +28,20 @@ newFastMutInt n = do
where
!(I# size) = finiteBitSize (0 :: Int) `unsafeShiftR` 3
create = IO $ \s ->
- case newByteArray# size s of { (# s, arr #) ->
- (# s, FastMutInt arr #) }
+ case newByteArray# size s of
+ (# s, arr #) -> (# s, FastMutInt arr #)
readFastMutInt :: FastMutInt -> IO Int
readFastMutInt (FastMutInt arr) = IO $ \s ->
- case readIntArray# arr 0# s of { (# s, i #) ->
- (# s, I# i #) }
+ case readIntArray# arr 0# s of
+ (# s, i #) -> (# s, I# i #)
writeFastMutInt :: FastMutInt -> Int -> IO ()
writeFastMutInt (FastMutInt arr) (I# i) = IO $ \s ->
- case writeIntArray# arr 0# i s of { s ->
- (# s, () #) }
+ case writeIntArray# arr 0# i s of
+ s -> (# s, () #)
+
+atomicFetchAddFastMut :: FastMutInt -> Int -> IO Int
+atomicFetchAddFastMut (FastMutInt arr) (I# i) = IO $ \s ->
+ case fetchAddIntArray# arr 0# i s of
+ (# s, n #) -> (# s, I# n #)