diff options
| author | Doug Barton <dougb@FreeBSD.org> | 2011-07-06 00:49:35 +0000 |
|---|---|---|
| committer | Doug Barton <dougb@FreeBSD.org> | 2011-07-06 00:49:35 +0000 |
| commit | 2848efc76d615fcab502d5c135ec6ab30b0cdc33 (patch) | |
| tree | 2cb36571df8187c9d7e63e7b93e2f68025ef1c71 /contrib | |
| parent | a92a83d4e015066cdde7953304be1f07dcda06f4 (diff) | |
Notes
Diffstat (limited to 'contrib')
| -rw-r--r-- | contrib/bind9/lib/isc/sparc64/include/isc/atomic.h | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/contrib/bind9/lib/isc/sparc64/include/isc/atomic.h b/contrib/bind9/lib/isc/sparc64/include/isc/atomic.h index 9ee3c0b106c6..89eaec57fb9a 100644 --- a/contrib/bind9/lib/isc/sparc64/include/isc/atomic.h +++ b/contrib/bind9/lib/isc/sparc64/include/isc/atomic.h @@ -72,9 +72,9 @@ isc_atomic_xadd(isc_int32_t *p, isc_int32_t val) { for (prev = *(volatile isc_int32_t *)p; ; prev = swapped) { swapped = prev + val; __asm__ volatile( - "casa [%1] %2, %3, %0" - : "+r"(swapped) - : "r"(p), "n"(ASI_P), "r"(prev)); + "casa [%2] %3, %4, %0" + : "+r"(swapped), "=m"(*p) + : "r"(p), "n"(ASI_P), "r"(prev), "m"(*p)); if (swapped == prev) break; } @@ -92,10 +92,9 @@ isc_atomic_store(isc_int32_t *p, isc_int32_t val) { for (prev = *(volatile isc_int32_t *)p; ; prev = swapped) { swapped = val; __asm__ volatile( - "casa [%1] %2, %3, %0" - : "+r"(swapped) - : "r"(p), "n"(ASI_P), "r"(prev) - : "memory"); + "casa [%2] %3, %4, %0" + : "+r"(swapped), "=m"(*p) + : "r"(p), "n"(ASI_P), "r"(prev), "m"(*p)); if (swapped == prev) break; } @@ -111,9 +110,9 @@ isc_atomic_cmpxchg(isc_int32_t *p, isc_int32_t cmpval, isc_int32_t val) { isc_int32_t temp = val; __asm__ volatile( - "casa [%1] %2, %3, %0" - : "+r"(temp) - : "r"(p), "n"(ASI_P), "r"(cmpval)); + "casa [%2] %3, %4, %0" + : "+r"(temp), "=m"(*p) + : "r"(p), "n"(ASI_P), "r"(cmpval), "m"(*p)); return (temp); } |
