atomic.h (71023) | atomic.h (71085) |
---|---|
1/*- 2 * Copyright (c) 1998 Doug Rabson 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 1998 Doug Rabson 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/sys/i386/include/atomic.h 71023 2001-01-14 09:55:21Z jhb $ | 26 * $FreeBSD: head/sys/i386/include/atomic.h 71085 2001-01-16 00:18:36Z jhb $ |
27 */ 28#ifndef _MACHINE_ATOMIC_H_ 29#define _MACHINE_ATOMIC_H_ 30 31/* 32 * Various simple arithmetic on memory which is atomic in the presence 33 * of interrupts and multiple processors. 34 * --- 29 unchanged lines hidden (view full) --- 64 * This allows kernel modules to be portable between UP and SMP systems. 65 */ 66#if defined(KLD_MODULE) 67#define ATOMIC_ASM(NAME, TYPE, OP, V) \ 68void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v); 69 70int atomic_cmpset_int(volatile u_int *dst, u_int exp, u_int src); 71 | 27 */ 28#ifndef _MACHINE_ATOMIC_H_ 29#define _MACHINE_ATOMIC_H_ 30 31/* 32 * Various simple arithmetic on memory which is atomic in the presence 33 * of interrupts and multiple processors. 34 * --- 29 unchanged lines hidden (view full) --- 64 * This allows kernel modules to be portable between UP and SMP systems. 65 */ 66#if defined(KLD_MODULE) 67#define ATOMIC_ASM(NAME, TYPE, OP, V) \ 68void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v); 69 70int atomic_cmpset_int(volatile u_int *dst, u_int exp, u_int src); 71 |
72#define ATOMIC_STORE_LOAD(TYPE, LOP, SOP) \ 73u_##TYPE atomic_load_acq_##TYPE(volatile u_##TYPE *p); \ 74void atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v); 75 |
|
72#else /* !KLD_MODULE */ 73#if defined(SMP) 74#if defined(LOCORE) 75#define MPLOCKED lock ; 76#else 77#define MPLOCKED "lock ; " 78#endif 79#else 80#define MPLOCKED 81#endif 82 83/* 84 * The assembly is volatilized to demark potential before-and-after side 85 * effects if an interrupt or SMP collision were to occur. 86 */ | 76#else /* !KLD_MODULE */ 77#if defined(SMP) 78#if defined(LOCORE) 79#define MPLOCKED lock ; 80#else 81#define MPLOCKED "lock ; " 82#endif 83#else 84#define MPLOCKED 85#endif 86 87/* 88 * The assembly is volatilized to demark potential before-and-after side 89 * effects if an interrupt or SMP collision were to occur. 90 */ |
87#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 9) 88/* egcs 1.1.2+ version */ | |
89#define ATOMIC_ASM(NAME, TYPE, OP, V) \ 90static __inline void \ 91atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ 92{ \ 93 __asm __volatile(MPLOCKED OP \ 94 : "=m" (*p) \ 95 : "0" (*p), "ir" (V)); \ 96} --- 49 unchanged lines hidden (view full) --- 146 "r" (src), /* 2 */ 147 "m" (*(dst)) /* 3 */ 148 : "memory"); 149 150 return (res); 151} 152#endif /* defined(I386_CPU) */ 153 | 91#define ATOMIC_ASM(NAME, TYPE, OP, V) \ 92static __inline void \ 93atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ 94{ \ 95 __asm __volatile(MPLOCKED OP \ 96 : "=m" (*p) \ 97 : "0" (*p), "ir" (V)); \ 98} --- 49 unchanged lines hidden (view full) --- 148 "r" (src), /* 2 */ 149 "m" (*(dst)) /* 3 */ 150 : "memory"); 151 152 return (res); 153} 154#endif /* defined(I386_CPU) */ 155 |
154#define atomic_cmpset_long atomic_cmpset_int 155#define atomic_cmpset_acq_int atomic_cmpset_int 156#define atomic_cmpset_rel_int atomic_cmpset_int 157#define atomic_cmpset_acq_long atomic_cmpset_acq_int 158#define atomic_cmpset_rel_long atomic_cmpset_rel_int 159 160#else 161/* gcc <= 2.8 version */ 162#define ATOMIC_ASM(NAME, TYPE, OP, V) \ 163static __inline void \ 164atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ 165{ \ 166 __asm __volatile(MPLOCKED OP \ 167 : "=m" (*p) \ 168 : "ir" (V)); \ 169} \ 170 \ 171 172#endif 173#endif /* KLD_MODULE */ 174 175#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 9) 176 177/* egcs 1.1.2+ version */ 178ATOMIC_ASM(set, char, "orb %b2,%0", v) 179ATOMIC_ASM(clear, char, "andb %b2,%0", ~v) 180ATOMIC_ASM(add, char, "addb %b2,%0", v) 181ATOMIC_ASM(subtract, char, "subb %b2,%0", v) 182 183ATOMIC_ASM(set, short, "orw %w2,%0", v) 184ATOMIC_ASM(clear, short, "andw %w2,%0", ~v) 185ATOMIC_ASM(add, short, "addw %w2,%0", v) 186ATOMIC_ASM(subtract, short, "subw %w2,%0", v) 187 188ATOMIC_ASM(set, int, "orl %2,%0", v) 189ATOMIC_ASM(clear, int, "andl %2,%0", ~v) 190ATOMIC_ASM(add, int, "addl %2,%0", v) 191ATOMIC_ASM(subtract, int, "subl %2,%0", v) 192 193ATOMIC_ASM(set, long, "orl %2,%0", v) 194ATOMIC_ASM(clear, long, "andl %2,%0", ~v) 195ATOMIC_ASM(add, long, "addl %2,%0", v) 196ATOMIC_ASM(subtract, long, "subl %2,%0", v) 197 198#else 199 200/* gcc <= 2.8 version */ 201ATOMIC_ASM(set, char, "orb %1,%0", v) 202ATOMIC_ASM(clear, char, "andb %1,%0", ~v) 203ATOMIC_ASM(add, char, "addb %1,%0", v) 204ATOMIC_ASM(subtract, char, "subb %1,%0", v) 205 206ATOMIC_ASM(set, short, "orw %1,%0", v) 207ATOMIC_ASM(clear, short, "andw %1,%0", ~v) 208ATOMIC_ASM(add, short, "addw %1,%0", v) 209ATOMIC_ASM(subtract, short, "subw %1,%0", v) 210 211ATOMIC_ASM(set, int, "orl %1,%0", v) 212ATOMIC_ASM(clear, int, "andl %1,%0", ~v) 213ATOMIC_ASM(add, int, "addl %1,%0", v) 214ATOMIC_ASM(subtract, int, "subl %1,%0", v) 215 216ATOMIC_ASM(set, long, "orl %1,%0", v) 217ATOMIC_ASM(clear, long, "andl %1,%0", ~v) 218ATOMIC_ASM(add, long, "addl %1,%0", v) 219ATOMIC_ASM(subtract, long, "subl %1,%0", v) 220 221#endif 222 223#undef ATOMIC_ASM 224 225#ifndef WANT_FUNCTIONS 226#define ATOMIC_ACQ_REL(NAME, TYPE) \ 227static __inline void \ 228atomic_##NAME##_acq_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ 229{ \ 230 atomic_##NAME##_##TYPE(p, v); \ 231} \ 232 \ 233static __inline void \ 234atomic_##NAME##_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ 235{ \ 236 atomic_##NAME##_##TYPE(p, v); \ 237} 238 239ATOMIC_ACQ_REL(set, char) 240ATOMIC_ACQ_REL(clear, char) 241ATOMIC_ACQ_REL(add, char) 242ATOMIC_ACQ_REL(subtract, char) 243ATOMIC_ACQ_REL(set, short) 244ATOMIC_ACQ_REL(clear, short) 245ATOMIC_ACQ_REL(add, short) 246ATOMIC_ACQ_REL(subtract, short) 247ATOMIC_ACQ_REL(set, int) 248ATOMIC_ACQ_REL(clear, int) 249ATOMIC_ACQ_REL(add, int) 250ATOMIC_ACQ_REL(subtract, int) 251ATOMIC_ACQ_REL(set, long) 252ATOMIC_ACQ_REL(clear, long) 253ATOMIC_ACQ_REL(add, long) 254ATOMIC_ACQ_REL(subtract, long) 255 256#undef ATOMIC_ACQ_REL 257 258#if defined(KLD_MODULE) 259#define ATOMIC_STORE_LOAD(TYPE, LOP, SOP) \ 260u_##TYPE atomic_load_acq_##TYPE(volatile u_##TYPE *p); \ 261void atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v); 262#else | |
263#if defined(I386_CPU) 264/* 265 * We assume that a = b will do atomic loads and stores. 266 * 267 * XXX: This is _NOT_ safe on a P6 or higher because it does not guarantee 268 * memory ordering. These should only be used on a 386. 269 */ 270#define ATOMIC_STORE_LOAD(TYPE, LOP, SOP) \ --- 32 unchanged lines hidden (view full) --- 303atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ 304{ \ 305 __asm __volatile(SOP \ 306 : "+m" (*p), /* 0 */ \ 307 "+r" (v) /* 1 */ \ 308 : : "memory"); \ 309} 310#endif /* defined(I386_CPU) */ | 156#if defined(I386_CPU) 157/* 158 * We assume that a = b will do atomic loads and stores. 159 * 160 * XXX: This is _NOT_ safe on a P6 or higher because it does not guarantee 161 * memory ordering. These should only be used on a 386. 162 */ 163#define ATOMIC_STORE_LOAD(TYPE, LOP, SOP) \ --- 32 unchanged lines hidden (view full) --- 196atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ 197{ \ 198 __asm __volatile(SOP \ 199 : "+m" (*p), /* 0 */ \ 200 "+r" (v) /* 1 */ \ 201 : : "memory"); \ 202} 203#endif /* defined(I386_CPU) */ |
311#endif /* defined(KLD_MODULE) */ | 204#endif /* KLD_MODULE */ |
312 | 205 |
206ATOMIC_ASM(set, char, "orb %b2,%0", v) 207ATOMIC_ASM(clear, char, "andb %b2,%0", ~v) 208ATOMIC_ASM(add, char, "addb %b2,%0", v) 209ATOMIC_ASM(subtract, char, "subb %b2,%0", v) 210 211ATOMIC_ASM(set, short, "orw %w2,%0", v) 212ATOMIC_ASM(clear, short, "andw %w2,%0", ~v) 213ATOMIC_ASM(add, short, "addw %w2,%0", v) 214ATOMIC_ASM(subtract, short, "subw %w2,%0", v) 215 216ATOMIC_ASM(set, int, "orl %2,%0", v) 217ATOMIC_ASM(clear, int, "andl %2,%0", ~v) 218ATOMIC_ASM(add, int, "addl %2,%0", v) 219ATOMIC_ASM(subtract, int, "subl %2,%0", v) 220 221ATOMIC_ASM(set, long, "orl %2,%0", v) 222ATOMIC_ASM(clear, long, "andl %2,%0", ~v) 223ATOMIC_ASM(add, long, "addl %2,%0", v) 224ATOMIC_ASM(subtract, long, "subl %2,%0", v) 225 |
|
313ATOMIC_STORE_LOAD(char, "cmpxchgb %b0,%1", "xchgb %b1,%0") 314ATOMIC_STORE_LOAD(short,"cmpxchgw %w0,%1", "xchgw %w1,%0") 315ATOMIC_STORE_LOAD(int, "cmpxchgl %0,%1", "xchgl %1,%0") 316ATOMIC_STORE_LOAD(long, "cmpxchgl %0,%1", "xchgl %1,%0") 317 | 226ATOMIC_STORE_LOAD(char, "cmpxchgb %b0,%1", "xchgb %b1,%0") 227ATOMIC_STORE_LOAD(short,"cmpxchgw %w0,%1", "xchgw %w1,%0") 228ATOMIC_STORE_LOAD(int, "cmpxchgl %0,%1", "xchgl %1,%0") 229ATOMIC_STORE_LOAD(long, "cmpxchgl %0,%1", "xchgl %1,%0") 230 |
231#undef ATOMIC_ASM |
|
318#undef ATOMIC_STORE_LOAD 319 | 232#undef ATOMIC_STORE_LOAD 233 |
234#define atomic_set_acq_char atomic_set_char 235#define atomic_set_rel_char atomic_set_char 236#define atomic_clear_acq_char atomic_clear_char 237#define atomic_clear_rel_char atomic_clear_char 238#define atomic_add_acq_char atomic_add_char 239#define atomic_add_rel_char atomic_add_char 240#define atomic_subtract_acq_char atomic_subtract_char 241#define atomic_subtract_rel_char atomic_subtract_char 242 243#define atomic_set_acq_short atomic_set_short 244#define atomic_set_rel_short atomic_set_short 245#define atomic_clear_acq_short atomic_clear_short 246#define atomic_clear_rel_short atomic_clear_short 247#define atomic_add_acq_short atomic_add_short 248#define atomic_add_rel_short atomic_add_short 249#define atomic_subtract_acq_short atomic_subtract_short 250#define atomic_subtract_rel_short atomic_subtract_short 251 252#define atomic_set_acq_int atomic_set_int 253#define atomic_set_rel_int atomic_set_int 254#define atomic_clear_acq_int atomic_clear_int 255#define atomic_clear_rel_int atomic_clear_int 256#define atomic_add_acq_int atomic_add_int 257#define atomic_add_rel_int atomic_add_int 258#define atomic_subtract_acq_int atomic_subtract_int 259#define atomic_subtract_rel_int atomic_subtract_int 260#define atomic_cmpset_acq_int atomic_cmpset_int 261#define atomic_cmpset_rel_int atomic_cmpset_int 262 263#define atomic_set_acq_long atomic_set_long 264#define atomic_set_rel_long atomic_set_long 265#define atomic_clear_acq_long atomic_clear_long 266#define atomic_clear_rel_long atomic_clear_long 267#define atomic_add_acq_long atomic_add_long 268#define atomic_add_rel_long atomic_add_long 269#define atomic_subtract_acq_long atomic_subtract_long 270#define atomic_subtract_rel_long atomic_subtract_long 271#define atomic_cmpset_long atomic_cmpset_int 272#define atomic_cmpset_acq_long atomic_cmpset_acq_int 273#define atomic_cmpset_rel_long atomic_cmpset_rel_int 274 275#define atomic_cmpset_acq_ptr atomic_cmpset_ptr 276#define atomic_cmpset_rel_ptr atomic_cmpset_ptr 277 278#define atomic_set_8 atomic_set_char 279#define atomic_set_acq_8 atomic_set_acq_char 280#define atomic_set_rel_8 atomic_set_rel_char 281#define atomic_clear_8 atomic_clear_char 282#define atomic_clear_acq_8 atomic_clear_acq_char 283#define atomic_clear_rel_8 atomic_clear_rel_char 284#define atomic_add_8 atomic_add_char 285#define atomic_add_acq_8 atomic_add_acq_char 286#define atomic_add_rel_8 atomic_add_rel_char 287#define atomic_subtract_8 atomic_subtract_char 288#define atomic_subtract_acq_8 atomic_subtract_acq_char 289#define atomic_subtract_rel_8 atomic_subtract_rel_char 290#define atomic_load_acq_8 atomic_load_acq_char 291#define atomic_store_rel_8 atomic_store_rel_char 292 293#define atomic_set_16 atomic_set_short 294#define atomic_set_acq_16 atomic_set_acq_short 295#define atomic_set_rel_16 atomic_set_rel_short 296#define atomic_clear_16 atomic_clear_short 297#define atomic_clear_acq_16 atomic_clear_acq_short 298#define atomic_clear_rel_16 atomic_clear_rel_short 299#define atomic_add_16 atomic_add_short 300#define atomic_add_acq_16 atomic_add_acq_short 301#define atomic_add_rel_16 atomic_add_rel_short 302#define atomic_subtract_16 atomic_subtract_short 303#define atomic_subtract_acq_16 atomic_subtract_acq_short 304#define atomic_subtract_rel_16 atomic_subtract_rel_short 305#define atomic_load_acq_16 atomic_load_acq_short 306#define atomic_store_rel_16 atomic_store_rel_short 307 308#define atomic_set_32 atomic_set_int 309#define atomic_set_acq_32 atomic_set_acq_int 310#define atomic_set_rel_32 atomic_set_rel_int 311#define atomic_clear_32 atomic_clear_int 312#define atomic_clear_acq_32 atomic_clear_acq_int 313#define atomic_clear_rel_32 atomic_clear_rel_int 314#define atomic_add_32 atomic_add_int 315#define atomic_add_acq_32 atomic_add_acq_int 316#define atomic_add_rel_32 atomic_add_rel_int 317#define atomic_subtract_32 atomic_subtract_int 318#define atomic_subtract_acq_32 atomic_subtract_acq_int 319#define atomic_subtract_rel_32 atomic_subtract_rel_int 320#define atomic_load_acq_32 atomic_load_acq_int 321#define atomic_store_rel_32 atomic_store_rel_int 322#define atomic_cmpset_32 atomic_cmpset_int 323#define atomic_cmpset_acq_32 atomic_cmpset_acq_int 324#define atomic_cmpset_rel_32 atomic_cmpset_rel_int 325#define atomic_readandclear_32 atomic_readandclear_int 326 327#if !defined(WANT_FUNCTIONS) |
|
320static __inline int 321atomic_cmpset_ptr(volatile void *dst, void *exp, void *src) 322{ 323 | 328static __inline int 329atomic_cmpset_ptr(volatile void *dst, void *exp, void *src) 330{ 331 |
324 return ( 325 atomic_cmpset_int((volatile u_int *)dst, (u_int)exp, (u_int)src)); | 332 return (atomic_cmpset_int((volatile u_int *)dst, (u_int)exp, 333 (u_int)src)); |
326} 327 | 334} 335 |
328#define atomic_cmpset_acq_ptr atomic_cmpset_ptr 329#define atomic_cmpset_rel_ptr atomic_cmpset_ptr 330 | |
331static __inline void * 332atomic_load_acq_ptr(volatile void *p) 333{ 334 return (void *)atomic_load_acq_int((volatile u_int *)p); 335} 336 337static __inline void 338atomic_store_rel_ptr(volatile void *p, void *v) --- 51 unchanged lines hidden (view full) --- 390 " xorl %0,%0 ; " 391 " xchgl %1,%0 ; " 392 "# atomic_readandclear_int" 393 : "=&r" (result) /* 0 (result) */ 394 : "m" (*addr)); /* 1 (addr) */ 395 396 return (result); 397} | 336static __inline void * 337atomic_load_acq_ptr(volatile void *p) 338{ 339 return (void *)atomic_load_acq_int((volatile u_int *)p); 340} 341 342static __inline void 343atomic_store_rel_ptr(volatile void *p, void *v) --- 51 unchanged lines hidden (view full) --- 395 " xorl %0,%0 ; " 396 " xchgl %1,%0 ; " 397 "# atomic_readandclear_int" 398 : "=&r" (result) /* 0 (result) */ 399 : "m" (*addr)); /* 1 (addr) */ 400 401 return (result); 402} |
398#endif 399 400#define atomic_set_8 atomic_set_char 401#define atomic_set_acq_8 atomic_set_acq_char 402#define atomic_set_rel_8 atomic_set_rel_char 403#define atomic_clear_8 atomic_clear_char 404#define atomic_clear_acq_8 atomic_clear_acq_char 405#define atomic_clear_rel_8 atomic_clear_rel_char 406#define atomic_add_8 atomic_add_char 407#define atomic_add_acq_8 atomic_add_acq_char 408#define atomic_add_rel_8 atomic_add_rel_char 409#define atomic_subtract_8 atomic_subtract_char 410#define atomic_subtract_acq_8 atomic_subtract_acq_char 411#define atomic_subtract_rel_8 atomic_subtract_rel_char 412#define atomic_load_acq_8 atomic_load_acq_char 413#define atomic_store_rel_8 atomic_store_rel_char 414 415#define atomic_set_16 atomic_set_short 416#define atomic_set_acq_16 atomic_set_acq_short 417#define atomic_set_rel_16 atomic_set_rel_short 418#define atomic_clear_16 atomic_clear_short 419#define atomic_clear_acq_16 atomic_clear_acq_short 420#define atomic_clear_rel_16 atomic_clear_rel_short 421#define atomic_add_16 atomic_add_short 422#define atomic_add_acq_16 atomic_add_acq_short 423#define atomic_add_rel_16 atomic_add_rel_short 424#define atomic_subtract_16 atomic_subtract_short 425#define atomic_subtract_acq_16 atomic_subtract_acq_short 426#define atomic_subtract_rel_16 atomic_subtract_rel_short 427#define atomic_load_acq_16 atomic_load_acq_short 428#define atomic_store_rel_16 atomic_store_rel_short 429 430#define atomic_set_32 atomic_set_int 431#define atomic_set_acq_32 atomic_set_acq_int 432#define atomic_set_rel_32 atomic_set_rel_int 433#define atomic_clear_32 atomic_clear_int 434#define atomic_clear_acq_32 atomic_clear_acq_int 435#define atomic_clear_rel_32 atomic_clear_rel_int 436#define atomic_add_32 atomic_add_int 437#define atomic_add_acq_32 atomic_add_acq_int 438#define atomic_add_rel_32 atomic_add_rel_int 439#define atomic_subtract_32 atomic_subtract_int 440#define atomic_subtract_acq_32 atomic_subtract_acq_int 441#define atomic_subtract_rel_32 atomic_subtract_rel_int 442#define atomic_load_acq_32 atomic_load_acq_int 443#define atomic_store_rel_32 atomic_store_rel_int 444#define atomic_cmpset_32 atomic_cmpset_int 445#define atomic_cmpset_acq_32 atomic_cmpset_acq_int 446#define atomic_cmpset_rel_32 atomic_cmpset_rel_int 447#define atomic_readandclear_32 atomic_readandclear_int 448 | 403#endif /* !defined(WANT_FUNCTIONS) */ |
449#endif /* ! _MACHINE_ATOMIC_H_ */ | 404#endif /* ! _MACHINE_ATOMIC_H_ */ |