--- src/lib/libast/features/aso +++ src/lib/libast/features/aso 2012-01-18 11:31:07.856479000 +0000 @@ -1,12 +1,17 @@ # ast atomic scalar operations feature tests if aso note{ gcc 4.1+ memory atomic operations model }end link{ + #include int main() { - unsigned int i = 0; - return __sync_fetch_and_add(&i,7); + uint8_t i = 0; + uint16_t j = 0; + uint32_t l = 0; + uint64_t m = 0; + return __sync_fetch_and_add(&i,7)+__sync_fetch_and_add(&j,7)+__sync_fetch_and_add(&l,7)+__sync_fetch_and_add(&m,7); } }end && { + #include #define _aso_cas8(p,o,n) __sync_val_compare_and_swap(p,o,n) #define _aso_inc8(p) __sync_fetch_and_add(p,1) #define _aso_dec8(p) __sync_fetch_and_sub(p,1) @@ -26,6 +31,7 @@ if aso note{ gcc 4.1+ memory atomic oper #endif } elif aso note{ atomic_cas_64 }end link{ + #include #include int main() { @@ -34,6 +40,7 @@ elif aso note{ atomic_cas_64 return atomic_cas_64(&i, 0, 1) != 0 || atomic_add_32_nv(&j, 1) != 1; } }end && { + #include #include #define _aso_cas8(p,o,n) atomic_cas_8(p,o,n) #define _aso_inc8(p) atomic_add_8_nv(p,1) @@ -54,6 +61,7 @@ elif aso note{ atomic_cas_64 #endif } elif aso note{ atomic_cas_32 }end link{ + #include #include int main() { @@ -61,6 +69,7 @@ elif aso note{ atomic_cas_32 return atomic_cas_32(&i, 0, 1) != 0 || atomic_add_32_nv(&i, 1) != 1; } }end && { + #include #include #define _aso_cas8(p,o,n) atomic_cas_8(p,o,n) #define _aso_inc8(p) atomic_add_8_nv(p,1) @@ -74,6 +83,7 @@ elif aso note{ atomic_cas_32 #define _aso_casptr(p,o,n) ((void*)atomic_cas_32((uint32_t*)p,(uint32_t)o,(uint32_t)n)) } elif aso -latomic note{ atomic_cas_64 with -latomic }end link{ + #include #include int main() { @@ -82,6 +92,7 @@ elif aso -latomic note{ atomi return atomic_cas_64(&i, 0, 1) != 0 || atomic_add_32_nv(&j, 1) != 1; } }end && { + #include #include #define _REQ_atomic #define _aso_cas8(p,o,n) atomic_cas_8(p,o,n) @@ -103,6 +114,7 @@ elif aso -latomic note{ atomi #endif } elif aso note{ atomic_cas_32 with -latomic }end link{ + #include #include int main() { @@ -110,6 +122,7 @@ elif aso note{ atomic_cas_32 return atomic_cas_32(&i, 0, 1) != 0 || atomic_add_32_nv(&i, 1) != 1; } }end && { + #include #include #define _REQ_atomic #define _aso_cas8(p,o,n) atomic_cas_8(p,o,n) @@ -124,6 +137,7 @@ elif aso note{ atomic_cas_32 #define _aso_casptr(p,o,n) ((void*)atomic_cas_32((uint32_t*)p,(uint32_t)o,(uint32_t)n)) } elif aso note{ cas64 }end link{ + #include #include int main() { @@ -132,6 +146,7 @@ elif aso note{ cas64 }end lin return cas64(&i, 0, 1) != 0 || atomic_add_32_nv(&j, 1) != 1; } }end && { + #include #include #define _aso_cas8(p,o,n) cas8(p,o,n) #define _aso_inc8(p) atomic_add_8_nv(p,1) @@ -152,6 +167,7 @@ elif aso note{ cas64 }end lin #endif } elif aso note{ cas32 }end link{ + #include #include int main() { @@ -159,6 +175,7 @@ elif aso note{ cas32 }end lin return cas32(&i, 0, 1) != 0 || atomic_add_32_nv(&i, 1) != 1; } }end && { + #include #include #define _aso_cas8(p,o,n) cas8(p,o,n) #define _aso_inc8(p) atomic_add_8_nv(p,1)