From: Ivan Maidanski Date: Sat, 12 Jan 2013 16:36:34 +0000 (+0400) Subject: Cast away volatile on dereference in CAS-based generalization primitives X-Git-Tag: libatomic_ops-7_4_0~48^2~23 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7c4d646f5cdf9cb51e1d5c587a33a5b3f517552f;p=platform%2Fupstream%2Flibatomic_ops.git Cast away volatile on dereference in CAS-based generalization primitives * src/atomic_ops/generalize-arithm.template (AO_XSIZE_fetch_and_add_full, AO_XSIZE_fetch_and_add_acquire, AO_XSIZE_fetch_and_add_release, AO_XSIZE_fetch_and_add, AO_XSIZE_and_full, AO_XSIZE_or_full, AO_XSIZE_xor_full): Cast away the volatile (when reading old value before CAS) for architectures like IA64 (where volatile adds barrier semantics). * src/atomic_ops/generalize-small.template (AO_XSIZE_load_read, AO_XSIZE_load_full, AO_XSIZE_load_acquire, AO_XSIZE_load): Likewise. * src/atomic_ops/generalize-arithm.h: Regenerate. * src/atomic_ops/generalize-small.h: Likewise. --- diff --git a/src/atomic_ops/generalize-arithm.h b/src/atomic_ops/generalize-arithm.h index a50c697..2607d6e 100644 --- a/src/atomic_ops/generalize-arithm.h +++ b/src/atomic_ops/generalize-arithm.h @@ -140,7 +140,7 @@ do { - old = *addr; + old = *(unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap_full(addr, old, old + incr))); @@ -158,7 +158,7 @@ do { - old = *addr; + old = *(unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap_acquire(addr, old, old + incr))); @@ -176,7 +176,7 @@ do { - old = *addr; + old = *(unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap_release(addr, old, old + incr))); @@ -194,7 +194,7 @@ do { - old = *addr; + old = *(unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap(addr, old, old + incr))); @@ -589,7 +589,7 @@ do { - old = *addr; + old = *(unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap_full(addr, old, old & value))); @@ -671,7 +671,7 @@ do { - old = *addr; + old = *(unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap_full(addr, old, old | value))); @@ -752,7 +752,7 @@ do { - old = *addr; + old = *(unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap_full(addr, old, old ^ value))); @@ -967,7 +967,7 @@ do { - old = *addr; + old = *(unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap_full(addr, old, old + incr))); @@ -985,7 +985,7 @@ do { - old = *addr; + old = *(unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap_acquire(addr, old, old + incr))); @@ -1003,7 +1003,7 @@ do { - old = *addr; + old = *(unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap_release(addr, old, old + incr))); @@ -1021,7 +1021,7 @@ do { - old = *addr; + old = *(unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap(addr, old, old + incr))); @@ -1416,7 +1416,7 @@ do { - old = *addr; + old = *(unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap_full(addr, old, old & value))); @@ -1498,7 +1498,7 @@ do { - old = *addr; + old = *(unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap_full(addr, old, old | value))); @@ -1579,7 +1579,7 @@ do { - old = *addr; + old = *(unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap_full(addr, old, old ^ value))); @@ -1794,7 +1794,7 @@ do { - old = *addr; + old = *(unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap_full(addr, old, old + incr))); @@ -1812,7 +1812,7 @@ do { - old = *addr; + old = *(unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap_acquire(addr, old, old + incr))); @@ -1830,7 +1830,7 @@ do { - old = *addr; + old = *(unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap_release(addr, old, old + incr))); @@ -1848,7 +1848,7 @@ do { - old = *addr; + old = *(unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap(addr, old, old + incr))); @@ -2243,7 +2243,7 @@ do { - old = *addr; + old = *(unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap_full(addr, old, old & value))); @@ -2325,7 +2325,7 @@ do { - old = *addr; + old = *(unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap_full(addr, old, old | value))); @@ -2406,7 +2406,7 @@ do { - old = *addr; + old = *(unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap_full(addr, old, old ^ value))); @@ -2621,7 +2621,7 @@ do { - old = *addr; + old = *(AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap_full(addr, old, old + incr))); @@ -2639,7 +2639,7 @@ do { - old = *addr; + old = *(AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap_acquire(addr, old, old + incr))); @@ -2657,7 +2657,7 @@ do { - old = *addr; + old = *(AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap_release(addr, old, old + incr))); @@ -2675,7 +2675,7 @@ do { - old = *addr; + old = *(AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap(addr, old, old + incr))); @@ -3070,7 +3070,7 @@ do { - old = *addr; + old = *(AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap_full(addr, old, old & value))); @@ -3152,7 +3152,7 @@ do { - old = *addr; + old = *(AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap_full(addr, old, old | value))); @@ -3233,7 +3233,7 @@ do { - old = *addr; + old = *(AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap_full(addr, old, old ^ value))); diff --git a/src/atomic_ops/generalize-arithm.template b/src/atomic_ops/generalize-arithm.template index 93750c8..3696782 100644 --- a/src/atomic_ops/generalize-arithm.template +++ b/src/atomic_ops/generalize-arithm.template @@ -140,7 +140,7 @@ do { - old = *addr; + old = *(XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap_full(addr, old, old + incr))); @@ -158,7 +158,7 @@ do { - old = *addr; + old = *(XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap_acquire(addr, old, old + incr))); @@ -176,7 +176,7 @@ do { - old = *addr; + old = *(XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap_release(addr, old, old + incr))); @@ -194,7 +194,7 @@ do { - old = *addr; + old = *(XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap(addr, old, old + incr))); @@ -589,7 +589,7 @@ do { - old = *addr; + old = *(XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap_full(addr, old, old & value))); @@ -671,7 +671,7 @@ do { - old = *addr; + old = *(XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap_full(addr, old, old | value))); @@ -752,7 +752,7 @@ do { - old = *addr; + old = *(XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap_full(addr, old, old ^ value))); diff --git a/src/atomic_ops/generalize-small.h b/src/atomic_ops/generalize-small.h index 79a0210..dfc3c8c 100644 --- a/src/atomic_ops/generalize-small.h +++ b/src/atomic_ops/generalize-small.h @@ -320,7 +320,7 @@ unsigned/**/char result; do { - result = *addr; + result = *(const unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap_read( (volatile unsigned/**/char *)addr, result, result))); @@ -350,7 +350,7 @@ unsigned/**/char result; do { - result = *addr; + result = *(const unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap_full( (volatile unsigned/**/char *)addr, result, result))); @@ -367,7 +367,7 @@ unsigned/**/char result; do { - result = *addr; + result = *(const unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap_acquire( (volatile unsigned/**/char *)addr, result, result))); @@ -383,7 +383,7 @@ unsigned/**/char result; do { - result = *addr; + result = *(const unsigned/**/char *)addr; } while (AO_EXPECT_FALSE(!AO_char_compare_and_swap( (volatile unsigned/**/char *)addr, result, result))); @@ -783,7 +783,7 @@ unsigned/**/short result; do { - result = *addr; + result = *(const unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap_read( (volatile unsigned/**/short *)addr, result, result))); @@ -813,7 +813,7 @@ unsigned/**/short result; do { - result = *addr; + result = *(const unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap_full( (volatile unsigned/**/short *)addr, result, result))); @@ -830,7 +830,7 @@ unsigned/**/short result; do { - result = *addr; + result = *(const unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap_acquire( (volatile unsigned/**/short *)addr, result, result))); @@ -846,7 +846,7 @@ unsigned/**/short result; do { - result = *addr; + result = *(const unsigned/**/short *)addr; } while (AO_EXPECT_FALSE(!AO_short_compare_and_swap( (volatile unsigned/**/short *)addr, result, result))); @@ -1246,7 +1246,7 @@ unsigned result; do { - result = *addr; + result = *(const unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap_read( (volatile unsigned *)addr, result, result))); @@ -1276,7 +1276,7 @@ unsigned result; do { - result = *addr; + result = *(const unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap_full( (volatile unsigned *)addr, result, result))); @@ -1293,7 +1293,7 @@ unsigned result; do { - result = *addr; + result = *(const unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap_acquire( (volatile unsigned *)addr, result, result))); @@ -1309,7 +1309,7 @@ unsigned result; do { - result = *addr; + result = *(const unsigned *)addr; } while (AO_EXPECT_FALSE(!AO_int_compare_and_swap( (volatile unsigned *)addr, result, result))); @@ -1709,7 +1709,7 @@ AO_t result; do { - result = *addr; + result = *(const AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap_read( (volatile AO_t *)addr, result, result))); @@ -1739,7 +1739,7 @@ AO_t result; do { - result = *addr; + result = *(const AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap_full( (volatile AO_t *)addr, result, result))); @@ -1756,7 +1756,7 @@ AO_t result; do { - result = *addr; + result = *(const AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap_acquire( (volatile AO_t *)addr, result, result))); @@ -1772,7 +1772,7 @@ AO_t result; do { - result = *addr; + result = *(const AO_t *)addr; } while (AO_EXPECT_FALSE(!AO_compare_and_swap( (volatile AO_t *)addr, result, result))); @@ -2172,7 +2172,7 @@ AO_double_t result; do { - result = *addr; + result = *(const AO_double_t *)addr; } while (AO_EXPECT_FALSE(!AO_double_compare_and_swap_read( (volatile AO_double_t *)addr, result, result))); @@ -2202,7 +2202,7 @@ AO_double_t result; do { - result = *addr; + result = *(const AO_double_t *)addr; } while (AO_EXPECT_FALSE(!AO_double_compare_and_swap_full( (volatile AO_double_t *)addr, result, result))); @@ -2219,7 +2219,7 @@ AO_double_t result; do { - result = *addr; + result = *(const AO_double_t *)addr; } while (AO_EXPECT_FALSE(!AO_double_compare_and_swap_acquire( (volatile AO_double_t *)addr, result, result))); @@ -2235,7 +2235,7 @@ AO_double_t result; do { - result = *addr; + result = *(const AO_double_t *)addr; } while (AO_EXPECT_FALSE(!AO_double_compare_and_swap( (volatile AO_double_t *)addr, result, result))); diff --git a/src/atomic_ops/generalize-small.template b/src/atomic_ops/generalize-small.template index ae06901..b8ab439 100644 --- a/src/atomic_ops/generalize-small.template +++ b/src/atomic_ops/generalize-small.template @@ -320,7 +320,7 @@ XCTYPE result; do { - result = *addr; + result = *(const XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap_read( (volatile XCTYPE *)addr, result, result))); @@ -350,7 +350,7 @@ XCTYPE result; do { - result = *addr; + result = *(const XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap_full( (volatile XCTYPE *)addr, result, result))); @@ -367,7 +367,7 @@ XCTYPE result; do { - result = *addr; + result = *(const XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap_acquire( (volatile XCTYPE *)addr, result, result))); @@ -383,7 +383,7 @@ XCTYPE result; do { - result = *addr; + result = *(const XCTYPE *)addr; } while (AO_EXPECT_FALSE(!AO_XSIZE_compare_and_swap( (volatile XCTYPE *)addr, result, result)));