@@ -11,7 +11,7 @@
#include <asm/barrier.h>
#include <asm/fence.h>
-#define ___xchg(sfx, prepend, append) \
+#define ____xchg(sfx, prepend, append) \
({ \
__asm__ __volatile__ ( \
prepend \
@@ -22,17 +22,17 @@
: "memory"); \
})
-#define __xchg_relaxed(ptr, new, size) \
+#define ___xchg(ptr, new, size, sfx, prepend, append) \
({ \
__typeof__(ptr) __ptr = (ptr); \
__typeof__(new) __new = (new); \
__typeof__(*(ptr)) __ret; \
switch (size) { \
case 4: \
- ___xchg(".w", "", ""); \
+ ____xchg(".w" sfx, prepend, append); \
break; \
case 8: \
- ___xchg(".d", "", ""); \
+ ____xchg(".d" sfx, prepend, append); \
break; \
default: \
BUILD_BUG(); \
@@ -40,6 +40,9 @@
__ret; \
})
+#define __xchg_relaxed(ptr, new, size) \
+ ___xchg(ptr, new, size, "", "", "")
+
#define arch_xchg_relaxed(ptr, x) \
({ \
__typeof__(*(ptr)) _x_ = (x); \
@@ -48,22 +51,7 @@
})
#define __xchg_acquire(ptr, new, size) \
-({ \
- __typeof__(ptr) __ptr = (ptr); \
- __typeof__(new) __new = (new); \
- __typeof__(*(ptr)) __ret; \
- switch (size) { \
- case 4: \
- ___xchg(".w", "", RISCV_ACQUIRE_BARRIER); \
- break; \
- case 8: \
- ___xchg(".d", "", RISCV_ACQUIRE_BARRIER); \
- break; \
- default: \
- BUILD_BUG(); \
- } \
- __ret; \
-})
+ ___xchg(ptr, new, size, "", "", RISCV_ACQUIRE_BARRIER)
#define arch_xchg_acquire(ptr, x) \
({ \
@@ -73,22 +61,7 @@
})
#define __xchg_release(ptr, new, size) \
-({ \
- __typeof__(ptr) __ptr = (ptr); \
- __typeof__(new) __new = (new); \
- __typeof__(*(ptr)) __ret; \
- switch (size) { \
- case 4: \
- ___xchg(".w", RISCV_RELEASE_BARRIER, ""); \
- break; \
- case 8: \
- ___xchg(".d", RISCV_RELEASE_BARRIER, ""); \
- break; \
- default: \
- BUILD_BUG(); \
- } \
- __ret; \
-})
+ ___xchg(ptr, new, size, "", RISCV_RELEASE_BARRIER, "")
#define arch_xchg_release(ptr, x) \
({ \
@@ -98,22 +71,7 @@
})
#define __xchg(ptr, new, size) \
-({ \
- __typeof__(ptr) __ptr = (ptr); \
- __typeof__(new) __new = (new); \
- __typeof__(*(ptr)) __ret; \
- switch (size) { \
- case 4: \
- ___xchg(".w.aqrl", "", ""); \
- break; \
- case 8: \
- ___xchg(".d.aqrl", "", ""); \
- break; \
- default: \
- BUILD_BUG(); \
- } \
- __ret; \
-})
+ ___xchg(ptr, new, size, ".aqrl", "", "")
#define arch_xchg(ptr, x) \
({ \