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 --- |