610 lines
30 KiB
Diff
610 lines
30 KiB
Diff
diff --git a/Setup.hs b/Setup.hs
|
|
index 46f5022..36c3aa9 100644
|
|
--- a/Setup.hs
|
|
+++ b/Setup.hs
|
|
@@ -1,19 +1,7 @@
|
|
-{-# LANGUAGE CPP #-}
|
|
-import Distribution.Simple
|
|
-import Distribution.PackageDescription
|
|
-import Distribution.Simple.LocalBuildInfo(LocalBuildInfo, buildDir)
|
|
-import System.Cmd(system)
|
|
-
|
|
-ps :: String
|
|
-#if mingw32_HOST_OS || mingw32_TARGET_OS
|
|
-ps = ['\\']
|
|
-#else
|
|
-ps = ['/']
|
|
-#endif
|
|
+#!/usr/bin/runhaskell
|
|
+module Main where
|
|
|
|
-main = defaultMainWithHooks hooks
|
|
- where hooks = simpleUserHooks { runTests = runTests' }
|
|
+import Distribution.Simple
|
|
|
|
-runTests' :: Args -> Bool -> PackageDescription -> LocalBuildInfo -> IO ()
|
|
-runTests' _ _ _ lbi = system testprog >> return ()
|
|
- where testprog = (buildDir lbi) ++ ps ++ "test" ++ ps ++ "test"
|
|
+main :: IO ()
|
|
+main = defaultMain
|
|
diff --git a/bits-atomic.cabal b/bits-atomic.cabal
|
|
index 68da7f7..97b513f 100644
|
|
--- a/bits-atomic.cabal
|
|
+++ b/bits-atomic.cabal
|
|
@@ -43,3 +43,3 @@ Stability: experimental
|
|
Build-Type: Custom
|
|
-Cabal-Version: >= 1.6
|
|
+Cabal-Version: >= 1.8
|
|
Extra-Source-Files: cbits/atomic-bitops-gcc.c cbits/atomic-bitops-gcc.h
|
|
@@ -64,11 +64,6 @@ library
|
|
|
|
-flag test
|
|
- description: Build test program.
|
|
- default: False
|
|
-
|
|
-Executable test
|
|
- if flag(test)
|
|
- buildable: True
|
|
- build-depends:
|
|
- base >= 4 && < 6,
|
|
+test-suite test
|
|
+ Type: exitcode-stdio-1.0
|
|
+ build-depends: bits-atomic,
|
|
+ base >= 4 && < 6,
|
|
QuickCheck,
|
|
@@ -78,6 +73,4 @@ Executable test
|
|
test-framework
|
|
- else
|
|
- buildable: False
|
|
- hs-source-dirs: ., test
|
|
- other-modules: Data.Bits.Atomic
|
|
+
|
|
+ hs-source-dirs: test
|
|
main-is: test.hs
|
|
@@ -85,4 +78 @@ Executable test
|
|
GHC-Prof-Options: -auto-all
|
|
-
|
|
- Include-Dirs: cbits
|
|
- C-Sources: cbits/atomic-bitops-gcc.c
|
|
diff --git a/cbits/atomic-bitops-gcc.c b/cbits/atomic-bitops-gcc.c
|
|
index 3f9d4ef..96ed076 100644
|
|
--- a/cbits/atomic-bitops-gcc.c
|
|
+++ b/cbits/atomic-bitops-gcc.c
|
|
@@ -5,39 +5,39 @@ void mem_barrier (void) {return __sync_synchronize ();}
|
|
/* 8-bit */
|
|
-inline unsigned char fetch_and_add_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char fetch_and_add_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_fetch_and_add (p, v);
|
|
}
|
|
-inline unsigned char fetch_and_sub_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char fetch_and_sub_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_fetch_and_sub (p, v);
|
|
}
|
|
-inline unsigned char fetch_and_or_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char fetch_and_or_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_fetch_and_or (p, v);
|
|
}
|
|
-inline unsigned char fetch_and_and_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char fetch_and_and_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_fetch_and_and (p, v);
|
|
}
|
|
-inline unsigned char fetch_and_xor_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char fetch_and_xor_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_fetch_and_xor (p, v);
|
|
}
|
|
-inline unsigned char fetch_and_nand_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char fetch_and_nand_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_fetch_and_nand (p, v);
|
|
}
|
|
-inline unsigned char add_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char add_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_add_and_fetch (p, v);
|
|
}
|
|
-inline unsigned char sub_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char sub_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_sub_and_fetch (p, v);
|
|
}
|
|
-inline unsigned char or_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char or_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_or_and_fetch (p, v);
|
|
}
|
|
-inline unsigned char and_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char and_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_and_and_fetch (p, v);
|
|
}
|
|
-inline unsigned char xor_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char xor_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_xor_and_fetch (p, v);
|
|
}
|
|
-inline unsigned char nand_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
+unsigned char nand_and_fetch_8 (unsigned char *p, unsigned char v) {
|
|
return __sync_nand_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int
|
|
+unsigned int
|
|
bool_compare_and_swap_8 (unsigned char *p, unsigned char old, unsigned char new) {
|
|
@@ -45,3 +45,3 @@ bool_compare_and_swap_8 (unsigned char *p, unsigned char old, unsigned char new)
|
|
}
|
|
-inline unsigned char
|
|
+unsigned char
|
|
val_compare_and_swap_8 (unsigned char *p, unsigned char old, unsigned char new) {
|
|
@@ -49,3 +49,3 @@ val_compare_and_swap_8 (unsigned char *p, unsigned char old, unsigned char new)
|
|
}
|
|
-inline unsigned char lock_test_and_set_8 (unsigned char *p) {
|
|
+unsigned char lock_test_and_set_8 (unsigned char *p) {
|
|
// Only immediate 0/1 appear to be widely supported, so hardcode it
|
|
@@ -60,39 +60,39 @@ void lock_release_8 (unsigned char *p) {
|
|
/* 16-bit */
|
|
-inline unsigned short fetch_and_add_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short fetch_and_add_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_fetch_and_add (p, v);
|
|
}
|
|
-inline unsigned short fetch_and_sub_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short fetch_and_sub_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_fetch_and_sub (p, v);
|
|
}
|
|
-inline unsigned short fetch_and_or_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short fetch_and_or_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_fetch_and_or (p, v);
|
|
}
|
|
-inline unsigned short fetch_and_and_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short fetch_and_and_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_fetch_and_and (p, v);
|
|
}
|
|
-inline unsigned short fetch_and_xor_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short fetch_and_xor_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_fetch_and_xor (p, v);
|
|
}
|
|
-inline unsigned short fetch_and_nand_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short fetch_and_nand_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_fetch_and_nand (p, v);
|
|
}
|
|
-inline unsigned short add_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short add_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_add_and_fetch (p, v);
|
|
}
|
|
-inline unsigned short sub_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short sub_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_sub_and_fetch (p, v);
|
|
}
|
|
-inline unsigned short or_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short or_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_or_and_fetch (p, v);
|
|
}
|
|
-inline unsigned short and_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short and_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_and_and_fetch (p, v);
|
|
}
|
|
-inline unsigned short xor_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short xor_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_xor_and_fetch (p, v);
|
|
}
|
|
-inline unsigned short nand_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
+unsigned short nand_and_fetch_16 (unsigned short *p, unsigned short v) {
|
|
return __sync_nand_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int
|
|
+unsigned int
|
|
bool_compare_and_swap_16 (unsigned short *p, unsigned short old, unsigned short new) {
|
|
@@ -100,3 +100,3 @@ bool_compare_and_swap_16 (unsigned short *p, unsigned short old, unsigned short
|
|
}
|
|
-inline unsigned short
|
|
+unsigned short
|
|
val_compare_and_swap_16 (unsigned short *p, unsigned short old, unsigned short new) {
|
|
@@ -104,3 +104,3 @@ val_compare_and_swap_16 (unsigned short *p, unsigned short old, unsigned short n
|
|
}
|
|
-inline unsigned short lock_test_and_set_16 (unsigned short *p) {
|
|
+unsigned short lock_test_and_set_16 (unsigned short *p) {
|
|
// Only immediate 0/1 appear to be widely supported, so hardcode it
|
|
@@ -115,39 +115,39 @@ void lock_release_16 (unsigned short *p) {
|
|
/* 32-bit */
|
|
-inline unsigned int fetch_and_add_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int fetch_and_add_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_fetch_and_add (p, v);
|
|
}
|
|
-inline unsigned int fetch_and_sub_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int fetch_and_sub_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_fetch_and_sub (p, v);
|
|
}
|
|
-inline unsigned int fetch_and_or_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int fetch_and_or_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_fetch_and_or (p, v);
|
|
}
|
|
-inline unsigned int fetch_and_and_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int fetch_and_and_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_fetch_and_and (p, v);
|
|
}
|
|
-inline unsigned int fetch_and_xor_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int fetch_and_xor_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_fetch_and_xor (p, v);
|
|
}
|
|
-inline unsigned int fetch_and_nand_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int fetch_and_nand_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_fetch_and_nand (p, v);
|
|
}
|
|
-inline unsigned int add_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int add_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_add_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int sub_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int sub_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_sub_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int or_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int or_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_or_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int and_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int and_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_and_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int xor_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int xor_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_xor_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int nand_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
+unsigned int nand_and_fetch_32 (unsigned int *p, unsigned int v) {
|
|
return __sync_nand_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int
|
|
+unsigned int
|
|
bool_compare_and_swap_32 (unsigned int *p, unsigned int old, unsigned int new) {
|
|
@@ -155,3 +155,3 @@ bool_compare_and_swap_32 (unsigned int *p, unsigned int old, unsigned int new) {
|
|
}
|
|
-inline unsigned int
|
|
+unsigned int
|
|
val_compare_and_swap_32 (unsigned int *p, unsigned int old, unsigned int new) {
|
|
@@ -159,3 +159,3 @@ val_compare_and_swap_32 (unsigned int *p, unsigned int old, unsigned int new) {
|
|
}
|
|
-inline unsigned int lock_test_and_set_32 (unsigned int *p) {
|
|
+unsigned int lock_test_and_set_32 (unsigned int *p) {
|
|
// Only immediate 0/1 appear to be widely supported, so hardcode it
|
|
@@ -170,39 +170,39 @@ void lock_release_32 (unsigned int *p) {
|
|
/* 64-bit */
|
|
-inline unsigned long long fetch_and_add_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long fetch_and_add_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_fetch_and_add (p, v);
|
|
}
|
|
-inline unsigned long long fetch_and_sub_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long fetch_and_sub_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_fetch_and_sub (p, v);
|
|
}
|
|
-inline unsigned long long fetch_and_or_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long fetch_and_or_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_fetch_and_or (p, v);
|
|
}
|
|
-inline unsigned long long fetch_and_and_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long fetch_and_and_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_fetch_and_and (p, v);
|
|
}
|
|
-inline unsigned long long fetch_and_xor_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long fetch_and_xor_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_fetch_and_xor (p, v);
|
|
}
|
|
-inline unsigned long long fetch_and_nand_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long fetch_and_nand_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_fetch_and_nand (p, v);
|
|
}
|
|
-inline unsigned long long add_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long add_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_add_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long long sub_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long sub_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_sub_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long long or_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long or_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_or_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long long and_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long and_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_and_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long long xor_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long xor_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_xor_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long long nand_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
+unsigned long long nand_and_fetch_64 (unsigned long long *p, unsigned long long v) {
|
|
return __sync_nand_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int
|
|
+unsigned int
|
|
bool_compare_and_swap_64 (unsigned long long *p, unsigned long long old, unsigned long long new) {
|
|
@@ -210,3 +210,3 @@ bool_compare_and_swap_64 (unsigned long long *p, unsigned long long old, unsigne
|
|
}
|
|
-inline unsigned long long
|
|
+unsigned long long
|
|
val_compare_and_swap_64 (unsigned long long *p, unsigned long long old, unsigned long long new) {
|
|
@@ -214,3 +214,3 @@ val_compare_and_swap_64 (unsigned long long *p, unsigned long long old, unsigned
|
|
}
|
|
-inline unsigned long long lock_test_and_set_64 (unsigned long long *p) {
|
|
+unsigned long long lock_test_and_set_64 (unsigned long long *p) {
|
|
// Only immediate 0/1 appear to be widely supported, so hardcode it
|
|
@@ -225,39 +225,39 @@ void lock_release_64 (unsigned long long *p) {
|
|
/* Word-sized */
|
|
-inline unsigned long fetch_and_add_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long fetch_and_add_word (unsigned long *p, unsigned long v) {
|
|
return __sync_fetch_and_add (p, v);
|
|
}
|
|
-inline unsigned long fetch_and_sub_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long fetch_and_sub_word (unsigned long *p, unsigned long v) {
|
|
return __sync_fetch_and_sub (p, v);
|
|
}
|
|
-inline unsigned long fetch_and_or_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long fetch_and_or_word (unsigned long *p, unsigned long v) {
|
|
return __sync_fetch_and_or (p, v);
|
|
}
|
|
-inline unsigned long fetch_and_and_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long fetch_and_and_word (unsigned long *p, unsigned long v) {
|
|
return __sync_fetch_and_and (p, v);
|
|
}
|
|
-inline unsigned long fetch_and_xor_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long fetch_and_xor_word (unsigned long *p, unsigned long v) {
|
|
return __sync_fetch_and_xor (p, v);
|
|
}
|
|
-inline unsigned long fetch_and_nand_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long fetch_and_nand_word (unsigned long *p, unsigned long v) {
|
|
return __sync_fetch_and_nand (p, v);
|
|
}
|
|
-inline unsigned long add_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long add_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
return __sync_add_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long sub_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long sub_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
return __sync_sub_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long or_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long or_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
return __sync_or_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long and_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long and_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
return __sync_and_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long xor_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long xor_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
return __sync_xor_and_fetch (p, v);
|
|
}
|
|
-inline unsigned long nand_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
+unsigned long nand_and_fetch_word (unsigned long *p, unsigned long v) {
|
|
return __sync_nand_and_fetch (p, v);
|
|
}
|
|
-inline unsigned int
|
|
+unsigned int
|
|
bool_compare_and_swap_word (unsigned long *p, unsigned long old, unsigned long new) {
|
|
@@ -265,3 +265,3 @@ bool_compare_and_swap_word (unsigned long *p, unsigned long old, unsigned long n
|
|
}
|
|
-inline unsigned long
|
|
+unsigned long
|
|
val_compare_and_swap_word (unsigned long *p, unsigned long old, unsigned long new) {
|
|
@@ -269,3 +269,3 @@ val_compare_and_swap_word (unsigned long *p, unsigned long old, unsigned long ne
|
|
}
|
|
-inline unsigned long lock_test_and_set_word (unsigned long *p) {
|
|
+unsigned long lock_test_and_set_word (unsigned long *p) {
|
|
// Only immediate 0/1 appear to be widely supported, so hardcode it
|
|
diff --git a/cbits/atomic-bitops-gcc.h b/cbits/atomic-bitops-gcc.h
|
|
index f9eccc4..7e0ef15 100644
|
|
--- a/cbits/atomic-bitops-gcc.h
|
|
+++ b/cbits/atomic-bitops-gcc.h
|
|
@@ -6,19 +6,19 @@ void mem_barrier (void);
|
|
/* 8-bit */
|
|
-inline unsigned char fetch_and_add_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char fetch_and_sub_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char fetch_and_or_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char fetch_and_and_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char fetch_and_xor_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char fetch_and_nand_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char add_and_fetch_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char sub_and_fetch_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char or_and_fetch_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char and_and_fetch_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char xor_and_fetch_8 (unsigned char *, unsigned char );
|
|
-inline unsigned char nand_and_fetch_8 (unsigned char *, unsigned char );
|
|
-inline unsigned int
|
|
+unsigned char fetch_and_add_8 (unsigned char *, unsigned char );
|
|
+unsigned char fetch_and_sub_8 (unsigned char *, unsigned char );
|
|
+unsigned char fetch_and_or_8 (unsigned char *, unsigned char );
|
|
+unsigned char fetch_and_and_8 (unsigned char *, unsigned char );
|
|
+unsigned char fetch_and_xor_8 (unsigned char *, unsigned char );
|
|
+unsigned char fetch_and_nand_8 (unsigned char *, unsigned char );
|
|
+unsigned char add_and_fetch_8 (unsigned char *, unsigned char );
|
|
+unsigned char sub_and_fetch_8 (unsigned char *, unsigned char );
|
|
+unsigned char or_and_fetch_8 (unsigned char *, unsigned char );
|
|
+unsigned char and_and_fetch_8 (unsigned char *, unsigned char );
|
|
+unsigned char xor_and_fetch_8 (unsigned char *, unsigned char );
|
|
+unsigned char nand_and_fetch_8 (unsigned char *, unsigned char );
|
|
+unsigned int
|
|
bool_compare_and_swap_8 (unsigned char *, unsigned char, unsigned char);
|
|
-inline unsigned char
|
|
+unsigned char
|
|
val_compare_and_swap_8 (unsigned char *, unsigned char , unsigned char);
|
|
-inline unsigned char lock_test_and_set_8 (unsigned char *);
|
|
+unsigned char lock_test_and_set_8 (unsigned char *);
|
|
void lock_release_8 (unsigned char *);
|
|
@@ -26,19 +26,19 @@ void lock_release_8 (unsigned char *);
|
|
/* 16-bit */
|
|
-inline unsigned short fetch_and_add_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short fetch_and_sub_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short fetch_and_or_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short fetch_and_and_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short fetch_and_xor_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short fetch_and_nand_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short add_and_fetch_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short sub_and_fetch_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short or_and_fetch_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short and_and_fetch_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short xor_and_fetch_16 (unsigned short *, unsigned short );
|
|
-inline unsigned short nand_and_fetch_16 (unsigned short *, unsigned short );
|
|
-inline unsigned int
|
|
+unsigned short fetch_and_add_16 (unsigned short *, unsigned short );
|
|
+unsigned short fetch_and_sub_16 (unsigned short *, unsigned short );
|
|
+unsigned short fetch_and_or_16 (unsigned short *, unsigned short );
|
|
+unsigned short fetch_and_and_16 (unsigned short *, unsigned short );
|
|
+unsigned short fetch_and_xor_16 (unsigned short *, unsigned short );
|
|
+unsigned short fetch_and_nand_16 (unsigned short *, unsigned short );
|
|
+unsigned short add_and_fetch_16 (unsigned short *, unsigned short );
|
|
+unsigned short sub_and_fetch_16 (unsigned short *, unsigned short );
|
|
+unsigned short or_and_fetch_16 (unsigned short *, unsigned short );
|
|
+unsigned short and_and_fetch_16 (unsigned short *, unsigned short );
|
|
+unsigned short xor_and_fetch_16 (unsigned short *, unsigned short );
|
|
+unsigned short nand_and_fetch_16 (unsigned short *, unsigned short );
|
|
+unsigned int
|
|
bool_compare_and_swap_16 (unsigned short *, unsigned short , unsigned short );
|
|
-inline unsigned short
|
|
+unsigned short
|
|
val_compare_and_swap_16 (unsigned short *, unsigned short , unsigned short );
|
|
-inline unsigned short lock_test_and_set_16 (unsigned short *);
|
|
+unsigned short lock_test_and_set_16 (unsigned short *);
|
|
void lock_release_16 (unsigned short *);
|
|
@@ -47,19 +47,19 @@ void lock_release_16 (unsigned short *);
|
|
/* 32-bit */
|
|
-inline unsigned int fetch_and_add_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int fetch_and_sub_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int fetch_and_or_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int fetch_and_and_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int fetch_and_xor_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int fetch_and_nand_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int add_and_fetch_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int sub_and_fetch_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int or_and_fetch_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int and_and_fetch_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int xor_and_fetch_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int nand_and_fetch_32 (unsigned int *, unsigned int );
|
|
-inline unsigned int
|
|
+unsigned int fetch_and_add_32 (unsigned int *, unsigned int );
|
|
+unsigned int fetch_and_sub_32 (unsigned int *, unsigned int );
|
|
+unsigned int fetch_and_or_32 (unsigned int *, unsigned int );
|
|
+unsigned int fetch_and_and_32 (unsigned int *, unsigned int );
|
|
+unsigned int fetch_and_xor_32 (unsigned int *, unsigned int );
|
|
+unsigned int fetch_and_nand_32 (unsigned int *, unsigned int );
|
|
+unsigned int add_and_fetch_32 (unsigned int *, unsigned int );
|
|
+unsigned int sub_and_fetch_32 (unsigned int *, unsigned int );
|
|
+unsigned int or_and_fetch_32 (unsigned int *, unsigned int );
|
|
+unsigned int and_and_fetch_32 (unsigned int *, unsigned int );
|
|
+unsigned int xor_and_fetch_32 (unsigned int *, unsigned int );
|
|
+unsigned int nand_and_fetch_32 (unsigned int *, unsigned int );
|
|
+unsigned int
|
|
bool_compare_and_swap_32 (unsigned int *, unsigned int , unsigned int );
|
|
-inline unsigned int
|
|
+unsigned int
|
|
val_compare_and_swap_32 (unsigned int *, unsigned int , unsigned int );
|
|
-inline unsigned int lock_test_and_set_32 (unsigned int *);
|
|
+unsigned int lock_test_and_set_32 (unsigned int *);
|
|
void lock_release_32 (unsigned int *);
|
|
@@ -67,19 +67,19 @@ void lock_release_32 (unsigned int *);
|
|
/* 64-bit */
|
|
-inline unsigned long long fetch_and_add_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long fetch_and_sub_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long fetch_and_or_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long fetch_and_and_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long fetch_and_xor_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long fetch_and_nand_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long add_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long sub_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long or_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long and_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long xor_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned long long nand_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
-inline unsigned int
|
|
+unsigned long long fetch_and_add_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long fetch_and_sub_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long fetch_and_or_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long fetch_and_and_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long fetch_and_xor_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long fetch_and_nand_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long add_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long sub_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long or_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long and_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long xor_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
+unsigned long long nand_and_fetch_64 (unsigned long long *, unsigned long long );
|
|
+unsigned int
|
|
bool_compare_and_swap_64 (unsigned long long *, unsigned long long , unsigned long long );
|
|
-inline unsigned long long
|
|
+unsigned long long
|
|
val_compare_and_swap_64 (unsigned long long *, unsigned long long , unsigned long long );
|
|
-inline unsigned long long lock_test_and_set_64 (unsigned long long *);
|
|
+unsigned long long lock_test_and_set_64 (unsigned long long *);
|
|
void lock_release_64 (unsigned long long *);
|
|
@@ -87,19 +87,19 @@ void lock_release_64 (unsigned long long *);
|
|
/* Word */
|
|
-inline unsigned long fetch_and_add_word (unsigned long *, unsigned long );
|
|
-inline unsigned long fetch_and_sub_word (unsigned long *, unsigned long );
|
|
-inline unsigned long fetch_and_or_word (unsigned long *, unsigned long );
|
|
-inline unsigned long fetch_and_and_word (unsigned long *, unsigned long );
|
|
-inline unsigned long fetch_and_xor_word (unsigned long *, unsigned long );
|
|
-inline unsigned long fetch_and_nand_word (unsigned long *, unsigned long );
|
|
-inline unsigned long add_and_fetch_word (unsigned long *, unsigned long );
|
|
-inline unsigned long sub_and_fetch_word (unsigned long *, unsigned long );
|
|
-inline unsigned long or_and_fetch_word (unsigned long *, unsigned long );
|
|
-inline unsigned long and_and_fetch_word (unsigned long *, unsigned long );
|
|
-inline unsigned long xor_and_fetch_word (unsigned long *, unsigned long );
|
|
-inline unsigned long nand_and_fetch_word (unsigned long *, unsigned long );
|
|
-inline unsigned int
|
|
+unsigned long fetch_and_add_word (unsigned long *, unsigned long );
|
|
+unsigned long fetch_and_sub_word (unsigned long *, unsigned long );
|
|
+unsigned long fetch_and_or_word (unsigned long *, unsigned long );
|
|
+unsigned long fetch_and_and_word (unsigned long *, unsigned long );
|
|
+unsigned long fetch_and_xor_word (unsigned long *, unsigned long );
|
|
+unsigned long fetch_and_nand_word (unsigned long *, unsigned long );
|
|
+unsigned long add_and_fetch_word (unsigned long *, unsigned long );
|
|
+unsigned long sub_and_fetch_word (unsigned long *, unsigned long );
|
|
+unsigned long or_and_fetch_word (unsigned long *, unsigned long );
|
|
+unsigned long and_and_fetch_word (unsigned long *, unsigned long );
|
|
+unsigned long xor_and_fetch_word (unsigned long *, unsigned long );
|
|
+unsigned long nand_and_fetch_word (unsigned long *, unsigned long );
|
|
+unsigned int
|
|
bool_compare_and_swap_word (unsigned long *, unsigned long , unsigned long );
|
|
-inline unsigned long
|
|
+unsigned long
|
|
val_compare_and_swap_word (unsigned long *, unsigned long , unsigned long );
|
|
-inline unsigned long lock_test_and_set_word (unsigned long *);
|
|
+unsigned long lock_test_and_set_word (unsigned long *);
|
|
void lock_release_word (unsigned long *);
|
|
diff --git a/test/test.hs b/test/test.hs
|
|
index 8cf3cb2..38238b5 100644
|
|
--- a/test/test.hs
|
|
+++ b/test/test.hs
|
|
@@ -35,3 +35,3 @@ testPattern = 0xdeadbeef
|
|
|
|
-type PolyTest = (AtomicBits a, Storable a, Integral a, Bounded a) => a -> Assertion
|
|
+type PolyTest = (AtomicBits a, Storable a, Integral a, Bounded a, Show a) => a -> Assertion
|
|
|
|
@@ -50,3 +50,3 @@ testTypes _test = do
|
|
|
|
-test_compareAndSwap :: (AtomicBits a, Storable a, Integral a, Bounded a) =>
|
|
+test_compareAndSwap :: (AtomicBits a, Storable a, Integral a, Bounded a, Show a) =>
|
|
a -> Assertion
|
|
@@ -65,3 +65,3 @@ test_compareAndSwap_all = testTypes test_compareAndSwap
|
|
|
|
-test_compareAndSwapBool :: (AtomicBits a, Storable a, Integral a, Bounded a) =>
|
|
+test_compareAndSwapBool :: (AtomicBits a, Storable a, Integral a, Bounded a, Show a) =>
|
|
a -> Assertion
|
|
@@ -80,3 +80,3 @@ test_compareAndSwapBool_all = testTypes test_compareAndSwapBool
|
|
|
|
-test_fetchAndAdd :: (AtomicBits a, Storable a, Integral a, Bounded a) =>
|
|
+test_fetchAndAdd :: (AtomicBits a, Storable a, Integral a, Bounded a, Show a) =>
|
|
a -> Assertion
|
|
@@ -98,3 +98,3 @@ test_fetchAndAdd_all = testTypes test_fetchAndAdd
|
|
|
|
-test_fetchAndSub :: (AtomicBits a, Storable a, Integral a, Bounded a) =>
|
|
+test_fetchAndSub :: (AtomicBits a, Storable a, Integral a, Bounded a, Show a) =>
|
|
a -> Assertion
|
|
@@ -115,3 +115,3 @@ test_fetchAndSub_all = testTypes test_fetchAndSub
|
|
|
|
-test_fetchAndXor :: (AtomicBits a, Storable a, Integral a, Bounded a) =>
|
|
+test_fetchAndXor :: (AtomicBits a, Storable a, Integral a, Bounded a, Show a) =>
|
|
a -> Assertion
|
|
@@ -127,3 +127,3 @@ test_fetchAndXor_all = testTypes test_fetchAndXor
|
|
|
|
-test_subAndFetch :: (AtomicBits a, Storable a, Integral a, Bounded a) =>
|
|
+test_subAndFetch :: (AtomicBits a, Storable a, Integral a, Bounded a, Show a) =>
|
|
a -> Assertion
|
|
@@ -140,3 +140,3 @@ test_subAndFetch_all = testTypes test_subAndFetch
|
|
|
|
-test_lockTestRelease :: (AtomicBits a, Storable a, Integral a, Bounded a) =>
|
|
+test_lockTestRelease :: (AtomicBits a, Storable a, Integral a, Bounded a, Show a) =>
|
|
a -> Assertion
|