summaryrefslogtreecommitdiffstats
path: root/sys/alpha/include/atomic.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/alpha/include/atomic.h')
-rw-r--r--sys/alpha/include/atomic.h28
1 files changed, 16 insertions, 12 deletions
diff --git a/sys/alpha/include/atomic.h b/sys/alpha/include/atomic.h
index 599700b..cc2dbb4 100644
--- a/sys/alpha/include/atomic.h
+++ b/sys/alpha/include/atomic.h
@@ -29,6 +29,10 @@
#ifndef _MACHINE_ATOMIC_H_
#define _MACHINE_ATOMIC_H_
+#ifndef _SYS_CDEFS_H_
+#error this file needs sys/cdefs.h as a prerequisite
+#endif
+
#include <machine/alpha_cpu.h>
/*
@@ -50,7 +54,7 @@ static __inline void atomic_set_32(volatile u_int32_t *p, u_int32_t v)
{
u_int32_t temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldl_l %0, %2\n\t" /* load old value */
"bis %0, %3, %0\n\t" /* calculate new value */
@@ -66,7 +70,7 @@ static __inline void atomic_clear_32(volatile u_int32_t *p, u_int32_t v)
{
u_int32_t temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldl_l %0, %1\n\t" /* load old value */
"bic %0, %2, %0\n\t" /* calculate new value */
@@ -82,7 +86,7 @@ static __inline void atomic_add_32(volatile u_int32_t *p, u_int32_t v)
{
u_int32_t temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldl_l %0, %1\n\t" /* load old value */
"addl %0, %2, %0\n\t" /* calculate new value */
@@ -98,7 +102,7 @@ static __inline void atomic_subtract_32(volatile u_int32_t *p, u_int32_t v)
{
u_int32_t temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldl_l %0, %1\n\t" /* load old value */
"subl %0, %2, %0\n\t" /* calculate new value */
@@ -114,7 +118,7 @@ static __inline u_int32_t atomic_readandclear_32(volatile u_int32_t *addr)
{
u_int32_t result,temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"wmb\n" /* ensure pending writes have drained */
"1:\tldl_l %0,%2\n\t" /* load current value, asserting lock */
@@ -133,7 +137,7 @@ static __inline void atomic_set_64(volatile u_int64_t *p, u_int64_t v)
{
u_int64_t temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldq_l %0, %1\n\t" /* load old value */
"bis %0, %2, %0\n\t" /* calculate new value */
@@ -149,7 +153,7 @@ static __inline void atomic_clear_64(volatile u_int64_t *p, u_int64_t v)
{
u_int64_t temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldq_l %0, %1\n\t" /* load old value */
"bic %0, %2, %0\n\t" /* calculate new value */
@@ -165,7 +169,7 @@ static __inline void atomic_add_64(volatile u_int64_t *p, u_int64_t v)
{
u_int64_t temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldq_l %0, %1\n\t" /* load old value */
"addq %0, %2, %0\n\t" /* calculate new value */
@@ -181,7 +185,7 @@ static __inline void atomic_subtract_64(volatile u_int64_t *p, u_int64_t v)
{
u_int64_t temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldq_l %0, %1\n\t" /* load old value */
"subq %0, %2, %0\n\t" /* calculate new value */
@@ -197,7 +201,7 @@ static __inline u_int64_t atomic_readandclear_64(volatile u_int64_t *addr)
{
u_int64_t result,temp;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"wmb\n" /* ensure pending writes have drained */
"1:\tldq_l %0,%2\n\t" /* load current value, asserting lock */
@@ -336,7 +340,7 @@ atomic_cmpset_32(volatile u_int32_t* p, u_int32_t cmpval, u_int32_t newval)
{
u_int32_t ret;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldl_l %0, %1\n\t" /* load old value */
"cmpeq %0, %2, %0\n\t" /* compare */
@@ -363,7 +367,7 @@ atomic_cmpset_64(volatile u_int64_t* p, u_int64_t cmpval, u_int64_t newval)
{
u_int64_t ret;
-#ifdef __GNUC__
+#ifdef __GNUCLIKE_ASM
__asm __volatile (
"1:\tldq_l %0, %1\n\t" /* load old value */
"cmpeq %0, %2, %0\n\t" /* compare */
OpenPOWER on IntegriCloud