summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2013-01-12 20:36:34 +0400
committerIvan Maidanski <ivmai@mail.ru>2013-01-12 20:36:34 +0400
commit7c4d646f5cdf9cb51e1d5c587a33a5b3f517552f (patch)
treecca4ad3137886362d2c4214773652803d426c22c
parent0ee7f1e5f9ad22b1b4406d53ccd740721afd67ba (diff)
downloadlibatomic_ops-7c4d646f5cdf9cb51e1d5c587a33a5b3f517552f.tar.gz
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.
-rw-r--r--src/atomic_ops/generalize-arithm.h56
-rw-r--r--src/atomic_ops/generalize-arithm.template14
-rw-r--r--src/atomic_ops/generalize-small.h40
-rw-r--r--src/atomic_ops/generalize-small.template8
4 files changed, 59 insertions, 59 deletions
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)));