cmpxchg.h (4f2c0a4acffbec01079c28f839422e64ddeff004) cmpxchg.h (5800e77d88c0cd98bc10460df148631afa7b5e4d)
1/* SPDX-License-Identifier: GPL-2.0 */
2
3#ifndef __ASM_CSKY_CMPXCHG_H
4#define __ASM_CSKY_CMPXCHG_H
5
6#ifdef CONFIG_SMP
7#include <linux/bug.h>
8#include <asm/barrier.h>
1/* SPDX-License-Identifier: GPL-2.0 */
2
3#ifndef __ASM_CSKY_CMPXCHG_H
4#define __ASM_CSKY_CMPXCHG_H
5
6#ifdef CONFIG_SMP
7#include <linux/bug.h>
8#include <asm/barrier.h>
9#include <linux/cmpxchg-emu.h>
9
10#define __xchg_relaxed(new, ptr, size) \
11({ \
12 __typeof__(ptr) __ptr = (ptr); \
13 __typeof__(new) __new = (new); \
14 __typeof__(*(ptr)) __ret; \
15 unsigned long tmp; \
16 switch (size) { \

--- 39 unchanged lines hidden (view full) ---

56#define __cmpxchg_relaxed(ptr, old, new, size) \
57({ \
58 __typeof__(ptr) __ptr = (ptr); \
59 __typeof__(new) __new = (new); \
60 __typeof__(new) __tmp; \
61 __typeof__(old) __old = (old); \
62 __typeof__(*(ptr)) __ret; \
63 switch (size) { \
10
11#define __xchg_relaxed(new, ptr, size) \
12({ \
13 __typeof__(ptr) __ptr = (ptr); \
14 __typeof__(new) __new = (new); \
15 __typeof__(*(ptr)) __ret; \
16 unsigned long tmp; \
17 switch (size) { \

--- 39 unchanged lines hidden (view full) ---

57#define __cmpxchg_relaxed(ptr, old, new, size) \
58({ \
59 __typeof__(ptr) __ptr = (ptr); \
60 __typeof__(new) __new = (new); \
61 __typeof__(new) __tmp; \
62 __typeof__(old) __old = (old); \
63 __typeof__(*(ptr)) __ret; \
64 switch (size) { \
65 case 1: \
66 __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
67 break; \
64 case 4: \
65 asm volatile ( \
66 "1: ldex.w %0, (%3) \n" \
67 " cmpne %0, %4 \n" \
68 " bt 2f \n" \
69 " mov %1, %2 \n" \
70 " stex.w %1, (%3) \n" \
71 " bez %1, 1b \n" \

--- 14 unchanged lines hidden (view full) ---

86#define __cmpxchg_acquire(ptr, old, new, size) \
87({ \
88 __typeof__(ptr) __ptr = (ptr); \
89 __typeof__(new) __new = (new); \
90 __typeof__(new) __tmp; \
91 __typeof__(old) __old = (old); \
92 __typeof__(*(ptr)) __ret; \
93 switch (size) { \
68 case 4: \
69 asm volatile ( \
70 "1: ldex.w %0, (%3) \n" \
71 " cmpne %0, %4 \n" \
72 " bt 2f \n" \
73 " mov %1, %2 \n" \
74 " stex.w %1, (%3) \n" \
75 " bez %1, 1b \n" \

--- 14 unchanged lines hidden (view full) ---

90#define __cmpxchg_acquire(ptr, old, new, size) \
91({ \
92 __typeof__(ptr) __ptr = (ptr); \
93 __typeof__(new) __new = (new); \
94 __typeof__(new) __tmp; \
95 __typeof__(old) __old = (old); \
96 __typeof__(*(ptr)) __ret; \
97 switch (size) { \
98 case 1: \
99 __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
100 break; \
94 case 4: \
95 asm volatile ( \
96 "1: ldex.w %0, (%3) \n" \
97 " cmpne %0, %4 \n" \
98 " bt 2f \n" \
99 " mov %1, %2 \n" \
100 " stex.w %1, (%3) \n" \
101 " bez %1, 1b \n" \

--- 15 unchanged lines hidden (view full) ---

117#define __cmpxchg(ptr, old, new, size) \
118({ \
119 __typeof__(ptr) __ptr = (ptr); \
120 __typeof__(new) __new = (new); \
121 __typeof__(new) __tmp; \
122 __typeof__(old) __old = (old); \
123 __typeof__(*(ptr)) __ret; \
124 switch (size) { \
101 case 4: \
102 asm volatile ( \
103 "1: ldex.w %0, (%3) \n" \
104 " cmpne %0, %4 \n" \
105 " bt 2f \n" \
106 " mov %1, %2 \n" \
107 " stex.w %1, (%3) \n" \
108 " bez %1, 1b \n" \

--- 15 unchanged lines hidden (view full) ---

124#define __cmpxchg(ptr, old, new, size) \
125({ \
126 __typeof__(ptr) __ptr = (ptr); \
127 __typeof__(new) __new = (new); \
128 __typeof__(new) __tmp; \
129 __typeof__(old) __old = (old); \
130 __typeof__(*(ptr)) __ret; \
131 switch (size) { \
132 case 1: \
133 __ret = (__typeof__(*(ptr)))cmpxchg_emu_u8((volatile u8 *)__ptr, (uintptr_t)__old, (uintptr_t)__new); \
134 break; \
125 case 4: \
126 asm volatile ( \
127 RELEASE_FENCE \
128 "1: ldex.w %0, (%3) \n" \
129 " cmpne %0, %4 \n" \
130 " bt 2f \n" \
131 " mov %1, %2 \n" \
132 " stex.w %1, (%3) \n" \

--- 23 unchanged lines hidden ---
135 case 4: \
136 asm volatile ( \
137 RELEASE_FENCE \
138 "1: ldex.w %0, (%3) \n" \
139 " cmpne %0, %4 \n" \
140 " bt 2f \n" \
141 " mov %1, %2 \n" \
142 " stex.w %1, (%3) \n" \

--- 23 unchanged lines hidden ---