Go to the documentation of this file. 1 #ifndef _ALPHA_CMPXCHG_H
2 #error Do not include xchg.h directly!
16 static inline unsigned long
34 :
"=&r" (ret),
"=&r" (val),
"=&r" (tmp),
"=&r" (addr64)
35 :
"r" ((
long)m),
"1" (val) :
"memory");
40 static inline unsigned long
41 ____xchg(_u16,
volatile short *m,
unsigned long val)
43 unsigned long ret,
tmp, addr64;
58 :
"=&r" (ret),
"=&r" (val),
"=&r" (tmp),
"=&r" (addr64)
59 :
"r" ((
long)m),
"1" (val) :
"memory");
64 static inline unsigned long
65 ____xchg(_u32,
volatile int *m,
unsigned long val)
78 :
"=&r" (val),
"=&r" (dummy),
"=m" (*m)
79 :
"rI" (val),
"m" (*m) :
"memory");
84 static inline unsigned long
85 ____xchg(_u64,
volatile long *m,
unsigned long val)
98 :
"=&r" (val),
"=&r" (dummy),
"=m" (*m)
99 :
"rI" (val),
"m" (*m) :
"memory");
136 static inline unsigned long
137 ____cmpxchg(_u8,
volatile char *m,
unsigned char old,
unsigned char new)
139 unsigned long prev,
tmp, cmp, addr64;
144 "1: ldq_l %2,0(%4)\n"
157 :
"=&r" (prev),
"=&r" (
new),
"=&r" (tmp),
"=&r" (cmp),
"=&r" (addr64)
158 :
"r" ((
long)m),
"Ir" (old),
"1" (
new) :
"memory");
163 static inline unsigned long
164 ____cmpxchg(_u16,
volatile short *m,
unsigned short old,
unsigned short new)
166 unsigned long prev,
tmp, cmp, addr64;
171 "1: ldq_l %2,0(%4)\n"
184 :
"=&r" (prev),
"=&r" (
new),
"=&r" (tmp),
"=&r" (cmp),
"=&r" (addr64)
185 :
"r" ((
long)m),
"Ir" (old),
"1" (
new) :
"memory");
190 static inline unsigned long
191 ____cmpxchg(_u32,
volatile int *m,
int old,
int new)
193 unsigned long prev, cmp;
207 :
"=&r"(prev),
"=&r"(cmp),
"=m"(*m)
208 :
"r"((
long) old),
"r"(
new),
"m"(*m) :
"memory");
213 static inline unsigned long
214 ____cmpxchg(_u64,
volatile long *m,
unsigned long old,
unsigned long new)
216 unsigned long prev, cmp;
230 :
"=&r"(prev),
"=&r"(cmp),
"=m"(*m)
231 :
"r"((
long) old),
"r"(
new),
"m"(*m) :
"memory");
241 ____cmpxchg(,
volatile void *ptr,
unsigned long old,
unsigned long new,