Date: Wed, 30 Mar 2005 17:57:56 GMT From: John Baldwin <jhb@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 74112 for review Message-ID: <200503301757.j2UHvuId054521@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=74112 Change 74112 by jhb@jhb_slimer on 2005/03/30 17:57:50 More rototilling. Affected files ... .. //depot/projects/smpng/sys/alpha/include/atomic.h#17 edit .. //depot/projects/smpng/sys/amd64/include/atomic.h#12 edit .. //depot/projects/smpng/sys/arm/include/atomic.h#7 edit .. //depot/projects/smpng/sys/i386/include/atomic.h#27 edit .. //depot/projects/smpng/sys/ia64/include/atomic.h#7 edit .. //depot/projects/smpng/sys/powerpc/include/atomic.h#10 edit .. //depot/projects/smpng/sys/sparc64/include/atomic.h#10 edit Differences ... ==== //depot/projects/smpng/sys/alpha/include/atomic.h#17 (text+ko) ==== @@ -360,8 +360,6 @@ } /* Operations on chars. */ -#define atomic_load_acq_char atomic_load_acq_8 -#define atomic_store_rel_char atomic_store_rel_8 #define atomic_set_char atomic_set_8 #define atomic_set_acq_char atomic_set_acq_8 #define atomic_set_rel_char atomic_set_rel_8 @@ -374,10 +372,10 @@ #define atomic_subtract_char atomic_subtract_8 #define atomic_subtract_acq_char atomic_subtract_acq_8 #define atomic_subtract_rel_char atomic_subtract_rel_8 +#define atomic_load_acq_char atomic_load_acq_8 +#define atomic_store_rel_char atomic_store_rel_8 /* Operations on shorts. */ -#define atomic_load_acq_short atomic_load_acq_16 -#define atomic_store_rel_short atomic_store_rel_16 #define atomic_set_short atomic_set_16 #define atomic_set_acq_short atomic_set_acq_16 #define atomic_set_rel_short atomic_set_rel_16 @@ -390,10 +388,10 @@ #define atomic_subtract_short atomic_subtract_16 #define atomic_subtract_acq_short atomic_subtract_acq_16 #define atomic_subtract_rel_short atomic_subtract_rel_16 +#define atomic_load_acq_short atomic_load_acq_16 +#define atomic_store_rel_short atomic_store_rel_16 /* Operations on ints. */ -#define atomic_load_acq_int atomic_load_acq_32 -#define atomic_store_rel_int atomic_store_rel_32 #define atomic_set_int atomic_set_32 #define atomic_set_acq_int atomic_set_acq_32 #define atomic_set_rel_int atomic_set_rel_32 @@ -404,16 +402,16 @@ #define atomic_add_acq_int atomic_add_acq_32 #define atomic_add_rel_int atomic_add_rel_32 #define atomic_subtract_int atomic_subtract_32 -#define atomic_readandclear_int atomic_readandclear_32 +#define atomic_subtract_acq_int atomic_subtract_acq_32 +#define atomic_subtract_rel_int atomic_subtract_rel_32 #define atomic_cmpset_int atomic_cmpset_32 #define atomic_cmpset_acq_int atomic_cmpset_acq_32 #define atomic_cmpset_rel_int atomic_cmpset_rel_32 -#define atomic_subtract_acq_int atomic_subtract_acq_32 -#define atomic_subtract_rel_int atomic_subtract_rel_32 +#define atomic_load_acq_int atomic_load_acq_32 +#define atomic_store_rel_int atomic_store_rel_32 +#define atomic_readandclear_int atomic_readandclear_32 /* Operations on longs. */ -#define atomic_load_acq_long atomic_load_acq_64 -#define atomic_store_rel_long atomic_store_rel_64 #define atomic_set_long atomic_set_64 #define atomic_set_acq_long atomic_set_acq_64 #define atomic_set_rel_long atomic_set_rel_64 @@ -424,14 +422,16 @@ #define atomic_add_acq_long atomic_add_acq_64 #define atomic_add_rel_long atomic_add_rel_64 #define atomic_subtract_long atomic_subtract_64 -#define atomic_readandclear_long atomic_readandclear_64 +#define atomic_subtract_acq_long atomic_subtract_acq_64 +#define atomic_subtract_rel_long atomic_subtract_rel_64 #define atomic_cmpset_long atomic_cmpset_64 #define atomic_cmpset_acq_long atomic_cmpset_acq_64 #define atomic_cmpset_rel_long atomic_cmpset_rel_64 +#define atomic_load_acq_long atomic_load_acq_64 +#define atomic_store_rel_long atomic_store_rel_64 +#define atomic_readandclear_long atomic_readandclear_64 /* Operations on pointers. */ -#define atomic_load_acq_ptr atomic_load_acq_64 -#define atomic_store_rel_ptr atomic_store_rel_64 #define atomic_set_ptr atomic_set_64 #define atomic_set_acq_ptr atomic_set_acq_64 #define atomic_set_rel_ptr atomic_set_rel_64 @@ -444,9 +444,11 @@ #define atomic_subtract_ptr atomic_subtract_64 #define atomic_subtract_acq_ptr atomic_subtract_acq_64 #define atomic_subtract_rel_ptr atomic_subtract_rel_64 -#define atomic_readandclear_ptr atomic_readandclear_64 #define atomic_cmpset_ptr atomic_cmpset_64 #define atomic_cmpset_acq_ptr atomic_cmpset_acq_64 #define atomic_cmpset_rel_ptr atomic_cmpset_rel_64 +#define atomic_load_acq_ptr atomic_load_acq_64 +#define atomic_store_rel_ptr atomic_store_rel_64 +#define atomic_readandclear_ptr atomic_readandclear_64 #endif /* ! _MACHINE_ATOMIC_H_ */ ==== //depot/projects/smpng/sys/amd64/include/atomic.h#12 (text+ko) ==== @@ -69,9 +69,9 @@ */ #if defined(KLD_MODULE) #define ATOMIC_ASM(NAME, TYPE, OP, CONS, V) \ -void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v) \ -void atomic_##NAME##_##TYPE_acq(volatile u_##TYPE *p, u_##TYPE v) \ -void atomic_##NAME##_##TYPE_rel(volatile u_##TYPE *p, u_##TYPE v); +void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v); \ +void atomic_##NAME##_##TYPE_acq(volatile u_##TYPE *p, u_##TYPE v); \ +void atomic_##NAME##_##TYPE_rel(volatile u_##TYPE *p, u_##TYPE v) int atomic_cmpset_int(volatile u_int *dst, u_int exp, u_int src); int atomic_cmpset_long(volatile u_long *dst, u_long exp, u_long src); @@ -129,7 +129,9 @@ #else /* !(__GNUCLIKE_ASM && __CC_SUPPORTS___INLINE) */ #define ATOMIC_ASM(NAME, TYPE, OP, CONS, V) \ -extern void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v) +extern void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v); \ +extern void atomic_##NAME##_##TYPE##_acq(volatile u_##TYPE *p, u_##TYPE v); \ +extern void atomic_##NAME##_##TYPE##_rel(volatile u_##TYPE *p, u_##TYPE v) #endif /* __GNUCLIKE_ASM && __CC_SUPPORTS___INLINE */ @@ -313,79 +315,33 @@ #define atomic_subtract_32 atomic_subtract_int #define atomic_subtract_acq_32 atomic_subtract_acq_int #define atomic_subtract_rel_32 atomic_subtract_rel_int -#define atomic_load_acq_32 atomic_load_acq_int -#define atomic_store_rel_32 atomic_store_rel_int #define atomic_cmpset_32 atomic_cmpset_int #define atomic_cmpset_acq_32 atomic_cmpset_acq_int #define atomic_cmpset_rel_32 atomic_cmpset_rel_int +#define atomic_load_acq_32 atomic_load_acq_int +#define atomic_store_rel_32 atomic_store_rel_int #define atomic_readandclear_32 atomic_readandclear_int +#define atomic_set_ptr atomic_set_int +#define atomic_set_acq_ptr atomic_set_acq_int +#define atomic_set_rel_ptr atomic_set_rel_int +#define atomic_clear_ptr atomic_clear_int +#define atomic_clear_acq_ptr atomic_clear_acq_int +#define atomic_clear_rel_ptr atomic_clear_rel_int +#define atomic_add_ptr atomic_add_int +#define atomic_add_acq_ptr atomic_add_acq_int +#define atomic_add_rel_ptr atomic_add_rel_int +#define atomic_subtract_ptr atomic_subtract_int +#define atomic_subtract_acq_ptr atomic_subtract_acq_int +#define atomic_subtract_rel_ptr atomic_subtract_rel_int +#define atomic_cmpset_ptr atomic_cmpset_int +#define atomic_cmpset_acq_ptr atomic_cmpset_acq_int +#define atomic_cmpset_rel_ptr atomic_cmpset_rel_int +#define atomic_load_acq_ptr atomic_load_acq_int +#define atomic_store_rel_ptr atomic_store_rel_int +#define atomic_readandclear_ptr atomic_readandclear_int + #if !defined(WANT_FUNCTIONS) -static __inline int -atomic_cmpset_ptr(volatile void **dst, void *exp, void *src) -{ - - return (atomic_cmpset_long((volatile u_long *)dst, - (u_long)exp, (u_long)src)); -} - -static __inline int -atomic_cmpset_acq_ptr(volatile void **dst, void *exp, void *src) -{ - - return (atomic_cmpset_acq_long((volatile u_long *)dst, - (u_long)exp, (u_long)src)); -} - -static __inline int -atomic_cmpset_rel_ptr(volatile void **dst, void *exp, void *src) -{ - - return (atomic_cmpset_rel_long((volatile u_long *)dst, - (u_long)exp, (u_long)src)); -} - -static __inline void * -atomic_load_acq_ptr(volatile void **p) -{ - /* - * The apparently-bogus cast to intptr_t in the following is to - * avoid a warning from "gcc -Wbad-function-cast". - */ - return ((void *)(intptr_t)atomic_load_acq_long((volatile u_long *)p)); -} - -static __inline void -atomic_store_rel_ptr(volatile void *p, void *v) -{ - atomic_store_rel_long((volatile u_long *)p, (u_long)v); -} - -#define ATOMIC_PTR(NAME) \ -static __inline void \ -atomic_##NAME##_ptr(volatile void *p, uintptr_t v) \ -{ \ - atomic_##NAME##_long((volatile u_long *)p, v); \ -} \ - \ -static __inline void \ -atomic_##NAME##_acq_ptr(volatile void *p, uintptr_t v) \ -{ \ - atomic_##NAME##_acq_long((volatile u_long *)p, v);\ -} \ - \ -static __inline void \ -atomic_##NAME##_rel_ptr(volatile void *p, uintptr_t v) \ -{ \ - atomic_##NAME##_rel_long((volatile u_long *)p, v);\ -} - -ATOMIC_PTR(set) -ATOMIC_PTR(clear) -ATOMIC_PTR(add) -ATOMIC_PTR(subtract) - -#undef ATOMIC_PTR #if defined(__GNUCLIKE_ASM) && defined(__CC_SUPPORTS___INLINE) ==== //depot/projects/smpng/sys/arm/include/atomic.h#7 (text+ko) ==== @@ -175,15 +175,11 @@ #define atomic_store_rel_ptr atomic_store_ptr #define atomic_store_rel_int atomic_store_32 #define atomic_cmpset_rel_32 atomic_cmpset_32 -#define atomic_smpset_rel_ptr atomic_cmpset_ptr +#define atomic_cmpset_rel_ptr atomic_cmpset_ptr #define atomic_load_acq_int atomic_load_32 -#define atomic_clear_ptr(ptr, bit) atomic_clear_32( \ - (volatile uint32_t *)ptr, (uint32_t)bit) -#define atomic_store_ptr(ptr, bit) atomic_store_32( \ - (volatile uint32_t *)ptr, (uint32_t)bit) -#define atomic_cmpset_ptr(dst, exp, s) atomic_cmpset_32( \ - (volatile uint32_t *)dst, (uint32_t)exp, (uint32_t)s) -#define atomic_set_ptr(ptr, src) atomic_set_32( \ - (volatile uint32_t *)ptr, (uint32_t)src) +#define atomic_clear_ptr atomic_clear_32 +#define atomic_store_ptr atomic_store_32 +#define atomic_cmpset_ptr atomic_cmpset_32 +#define atomic_set_ptr atomic_set_32 #endif /* _MACHINE_ATOMIC_H_ */ ==== //depot/projects/smpng/sys/i386/include/atomic.h#27 (text+ko) ==== @@ -172,6 +172,14 @@ #endif /* defined(CPU_DISABLE_CMPXCHG) */ +#else /* !__GNUCLIKE_ASM */ + +extern int atomic_cmpset_int(volatile u_int *, u_int, u_int); + +#endif /* __GNUCLIKE_ASM */ + +#ifdef __GNUCLIKE_ASM + #if defined(_KERNEL) && !defined(SMP) /* @@ -229,8 +237,6 @@ #else /* !__GNUCLIKE_ASM */ -extern int atomic_cmpset_int(volatile u_int *, u_int, u_int); - #define ATOMIC_STORE_LOAD(TYPE, LOP, SOP) \ extern u_##TYPE atomic_load_acq_##TYPE(volatile u_##TYPE *p); \ extern void atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v) @@ -254,95 +260,16 @@ ATOMIC_ASM(add, int, "addl %1,%0", "ir", v); ATOMIC_ASM(subtract, int, "subl %1,%0", "ir", v); -ATOMIC_ASM(set, long, "orl %1,%0", "ir", v); -ATOMIC_ASM(clear, long, "andl %1,%0", "ir", ~v); -ATOMIC_ASM(add, long, "addl %1,%0", "ir", v); -ATOMIC_ASM(subtract, long, "subl %1,%0", "ir", v); - ATOMIC_STORE_LOAD(char, "cmpxchgb %b0,%1", "xchgb %b1,%0"); ATOMIC_STORE_LOAD(short,"cmpxchgw %w0,%1", "xchgw %w1,%0"); ATOMIC_STORE_LOAD(int, "cmpxchgl %0,%1", "xchgl %1,%0"); -ATOMIC_STORE_LOAD(long, "cmpxchgl %0,%1", "xchgl %1,%0"); #undef ATOMIC_ASM #undef ATOMIC_STORE_LOAD #if !defined(WANT_FUNCTIONS) -#define atomic_set_rel_char atomic_set_char -#define atomic_clear_rel_char atomic_clear_char -#define atomic_add_rel_char atomic_add_char -#define atomic_subtract_rel_char atomic_subtract_char -#define atomic_set_rel_short atomic_set_short -#define atomic_clear_rel_short atomic_clear_short -#define atomic_add_rel_short atomic_add_short -#define atomic_subtract_rel_short atomic_subtract_short - -#define atomic_set_rel_int atomic_set_int -#define atomic_clear_rel_int atomic_clear_int -#define atomic_add_rel_int atomic_add_int -#define atomic_subtract_rel_int atomic_subtract_int -#define atomic_cmpset_rel_int atomic_cmpset_int - -#define atomic_set_rel_long atomic_set_long -#define atomic_clear_rel_long atomic_clear_long -#define atomic_add_rel_long atomic_add_long -#define atomic_subtract_rel_long atomic_subtract_long -#define atomic_cmpset_long atomic_cmpset_int -#define atomic_cmpset_acq_long atomic_cmpset_acq_int -#define atomic_cmpset_rel_long atomic_cmpset_rel_int - -#define atomic_cmpset_rel_ptr atomic_cmpset_ptr - -#define atomic_set_8 atomic_set_char -#define atomic_set_acq_8 atomic_set_acq_char -#define atomic_set_rel_8 atomic_set_rel_char -#define atomic_clear_8 atomic_clear_char -#define atomic_clear_acq_8 atomic_clear_acq_char -#define atomic_clear_rel_8 atomic_clear_rel_char -#define atomic_add_8 atomic_add_char -#define atomic_add_acq_8 atomic_add_acq_char -#define atomic_add_rel_8 atomic_add_rel_char -#define atomic_subtract_8 atomic_subtract_char -#define atomic_subtract_acq_8 atomic_subtract_acq_char -#define atomic_subtract_rel_8 atomic_subtract_rel_char -#define atomic_load_acq_8 atomic_load_acq_char -#define atomic_store_rel_8 atomic_store_rel_char - -#define atomic_set_16 atomic_set_short -#define atomic_set_acq_16 atomic_set_acq_short -#define atomic_set_rel_16 atomic_set_rel_short -#define atomic_clear_16 atomic_clear_short -#define atomic_clear_acq_16 atomic_clear_acq_short -#define atomic_clear_rel_16 atomic_clear_rel_short -#define atomic_add_16 atomic_add_short -#define atomic_add_acq_16 atomic_add_acq_short -#define atomic_add_rel_16 atomic_add_rel_short -#define atomic_subtract_16 atomic_subtract_short -#define atomic_subtract_acq_16 atomic_subtract_acq_short -#define atomic_subtract_rel_16 atomic_subtract_rel_short -#define atomic_load_acq_16 atomic_load_acq_short -#define atomic_store_rel_16 atomic_store_rel_short - -#define atomic_set_32 atomic_set_int -#define atomic_set_acq_32 atomic_set_acq_int -#define atomic_set_rel_32 atomic_set_rel_int -#define atomic_clear_32 atomic_clear_int -#define atomic_clear_acq_32 atomic_clear_acq_int -#define atomic_clear_rel_32 atomic_clear_rel_int -#define atomic_add_32 atomic_add_int -#define atomic_add_acq_32 atomic_add_acq_int -#define atomic_add_rel_32 atomic_add_rel_int -#define atomic_subtract_32 atomic_subtract_int -#define atomic_subtract_acq_32 atomic_subtract_acq_int -#define atomic_subtract_rel_32 atomic_subtract_rel_int -#define atomic_load_acq_32 atomic_load_acq_int -#define atomic_store_rel_32 atomic_store_rel_int -#define atomic_cmpset_32 atomic_cmpset_int -#define atomic_cmpset_acq_32 atomic_cmpset_acq_int -#define atomic_cmpset_rel_32 atomic_cmpset_rel_int -#define atomic_readandclear_32 atomic_readandclear_int - +/* Acquire variants that add a "memory" clobber. */ #define ATOMIC_ACQ(NAME, TYPE) \ static __inline void \ atomic_##NAME##_acq_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ @@ -382,64 +309,24 @@ return (retval); } -static __inline int -atomic_cmpset_ptr(volatile void **dst, void *exp, void *src) -{ +/* Release variants are identical to the normal ones. */ +#define atomic_set_rel_char atomic_set_char +#define atomic_clear_rel_char atomic_clear_char +#define atomic_add_rel_char atomic_add_char +#define atomic_subtract_rel_char atomic_subtract_char - return (atomic_cmpset_int((volatile u_int *)dst, (u_int)exp, - (u_int)src)); -} +#define atomic_set_rel_short atomic_set_short +#define atomic_clear_rel_short atomic_clear_short +#define atomic_add_rel_short atomic_add_short +#define atomic_subtract_rel_short atomic_subtract_short -static __inline int -atomic_cmpset_acq_ptr(volatile void **dst, void *exp, void *src) -{ +#define atomic_set_rel_int atomic_set_int +#define atomic_clear_rel_int atomic_clear_int +#define atomic_add_rel_int atomic_add_int +#define atomic_subtract_rel_int atomic_subtract_int +#define atomic_cmpset_rel_int atomic_cmpset_int - return (atomic_cmpset_acq_int((volatile u_int *)dst, (u_int)exp, - (u_int)src)); -} - -static __inline void * -atomic_load_acq_ptr(volatile void **p) -{ - /* - * The apparently-bogus cast to intptr_t in the following is to - * avoid a warning from "gcc -Wbad-function-cast". - */ - return ((void *)(intptr_t)atomic_load_acq_int((volatile u_int *)p)); -} - -static __inline void -atomic_store_rel_ptr(volatile void **p, void *v) -{ - atomic_store_rel_int((volatile u_int *)p, (u_int)v); -} - -#define ATOMIC_PTR(NAME) \ -static __inline void \ -atomic_##NAME##_ptr(volatile void **p, uintptr_t v) \ -{ \ - atomic_##NAME##_int((volatile u_int *)p, v); \ -} \ - \ -static __inline void \ -atomic_##NAME##_acq_ptr(volatile void **p, uintptr_t v) \ -{ \ - atomic_##NAME##_acq_int((volatile u_int *)p, v);\ -} \ - \ -static __inline void \ -atomic_##NAME##_rel_ptr(volatile void **p, uintptr_t v) \ -{ \ - atomic_##NAME##_rel_int((volatile u_int *)p, v);\ -} - -ATOMIC_PTR(set) -ATOMIC_PTR(clear) -ATOMIC_PTR(add) -ATOMIC_PTR(subtract) - -#undef ATOMIC_PTR - +/* Read the current value and store a zero in the destination. */ #ifdef __GNUCLIKE_ASM static __inline u_int @@ -481,5 +368,97 @@ #endif /* __GNUCLIKE_ASM */ +/* Operations on 8-bit bytes. */ +#define atomic_set_8 atomic_set_char +#define atomic_set_acq_8 atomic_set_acq_char +#define atomic_set_rel_8 atomic_set_rel_char +#define atomic_clear_8 atomic_clear_char +#define atomic_clear_acq_8 atomic_clear_acq_char +#define atomic_clear_rel_8 atomic_clear_rel_char +#define atomic_add_8 atomic_add_char +#define atomic_add_acq_8 atomic_add_acq_char +#define atomic_add_rel_8 atomic_add_rel_char +#define atomic_subtract_8 atomic_subtract_char +#define atomic_subtract_acq_8 atomic_subtract_acq_char +#define atomic_subtract_rel_8 atomic_subtract_rel_char +#define atomic_load_acq_8 atomic_load_acq_char +#define atomic_store_rel_8 atomic_store_rel_char + +/* Operations on 16-bit words. */ +#define atomic_set_16 atomic_set_short +#define atomic_set_acq_16 atomic_set_acq_short +#define atomic_set_rel_16 atomic_set_rel_short +#define atomic_clear_16 atomic_clear_short +#define atomic_clear_acq_16 atomic_clear_acq_short +#define atomic_clear_rel_16 atomic_clear_rel_short +#define atomic_add_16 atomic_add_short +#define atomic_add_acq_16 atomic_add_acq_short +#define atomic_add_rel_16 atomic_add_rel_short +#define atomic_subtract_16 atomic_subtract_short +#define atomic_subtract_acq_16 atomic_subtract_acq_short +#define atomic_subtract_rel_16 atomic_subtract_rel_short +#define atomic_load_acq_16 atomic_load_acq_short +#define atomic_store_rel_16 atomic_store_rel_short + +/* Operations on 32-bit double words. */ +#define atomic_set_32 atomic_set_int +#define atomic_set_acq_32 atomic_set_acq_int +#define atomic_set_rel_32 atomic_set_rel_int +#define atomic_clear_32 atomic_clear_int +#define atomic_clear_acq_32 atomic_clear_acq_int +#define atomic_clear_rel_32 atomic_clear_rel_int +#define atomic_add_32 atomic_add_int +#define atomic_add_acq_32 atomic_add_acq_int +#define atomic_add_rel_32 atomic_add_rel_int +#define atomic_subtract_32 atomic_subtract_int +#define atomic_subtract_acq_32 atomic_subtract_acq_int +#define atomic_subtract_rel_32 atomic_subtract_rel_int +#define atomic_cmpset_32 atomic_cmpset_int +#define atomic_cmpset_acq_32 atomic_cmpset_acq_int +#define atomic_cmpset_rel_32 atomic_cmpset_rel_int +#define atomic_load_acq_32 atomic_load_acq_int +#define atomic_store_rel_32 atomic_store_rel_int +#define atomic_readandclear_32 atomic_readandclear_int + +/* Operations on longs. */ +#define atomic_set_long atomic_set_int +#define atomic_set_acq_long atomic_set_acq_int +#define atomic_set_rel_long atomic_set_rel_int +#define atomic_clear_long atomic_clear_int +#define atomic_clear_acq_long atomic_clear_acq_int +#define atomic_clear_rel_long atomic_clear_rel_int +#define atomic_add_long atomic_add_int +#define atomic_add_acq_long atomic_add_acq_int +#define atomic_add_rel_long atomic_add_rel_int +#define atomic_subtract_long atomic_subtract_int +#define atomic_subtract_acq_long atomic_subtract_acq_int +#define atomic_subtract_rel_long atomic_subtract_rel_int +#define atomic_cmpset_long atomic_cmpset_int +#define atomic_cmpset_acq_long atomic_cmpset_acq_int +#define atomic_cmpset_rel_long atomic_cmpset_rel_int +#define atomic_load_acq_long atomic_load_acq_int +#define atomic_store_rel_long atomic_store_rel_int +#define atomic_readandclear_long atomic_readandclear_int + +/* Operations on pointers. */ +#define atomic_set_ptr atomic_set_int +#define atomic_set_acq_ptr atomic_set_acq_int +#define atomic_set_rel_ptr atomic_set_rel_int +#define atomic_clear_ptr atomic_clear_int +#define atomic_clear_acq_ptr atomic_clear_acq_int +#define atomic_clear_rel_ptr atomic_clear_rel_int +#define atomic_add_ptr atomic_add_int +#define atomic_add_acq_ptr atomic_add_acq_int +#define atomic_add_rel_ptr atomic_add_rel_int +#define atomic_subtract_ptr atomic_subtract_int +#define atomic_subtract_acq_ptr atomic_subtract_acq_int +#define atomic_subtract_rel_ptr atomic_subtract_rel_int +#define atomic_cmpset_ptr atomic_cmpset_int +#define atomic_cmpset_acq_ptr atomic_cmpset_acq_int +#define atomic_cmpset_rel_ptr atomic_cmpset_rel_int +#define atomic_load_acq_ptr atomic_load_acq_int +#define atomic_store_rel_ptr atomic_store_rel_int +#define atomic_readandclear_ptr atomic_readandclear_int + #endif /* !defined(WANT_FUNCTIONS) */ #endif /* ! _MACHINE_ATOMIC_H_ */ ==== //depot/projects/smpng/sys/ia64/include/atomic.h#7 (text+ko) ==== @@ -138,6 +138,9 @@ #undef ATOMIC_STORE_LOAD +#define atomic_load_acq_ptr atomic_load_acq_64 +#define atomic_store_rel_ptr atomic_store_rel_64 + #define IA64_ATOMIC(sz, type, name, width, op) \ static __inline type \ atomic_##name##_acq_##width(volatile type *p, type v) \ @@ -255,6 +258,19 @@ #define atomic_add_rel_long atomic_add_rel_64 #define atomic_subtract_rel_long atomic_subtract_rel_64 +#define atomic_set_ptr atomic_set_64 +#define atomic_clear_ptr atomic_clear_64 +#define atomic_add_ptr atomic_add_64 +#define atomic_subtract_ptr atomic_subtract_64 +#define atomic_set_acq_ptr atomic_set_acq_64 +#define atomic_clear_acq_ptr atomic_clear_acq_64 +#define atomic_add_acq_ptr atomic_add_acq_64 +#define atomic_subtract_acq_ptr atomic_subtract_acq_64 +#define atomic_set_rel_ptr atomic_set_rel_64 +#define atomic_clear_rel_ptr atomic_clear_rel_64 +#define atomic_add_rel_ptr atomic_add_rel_64 +#define atomic_subtract_rel_ptr atomic_subtract_rel_64 + #undef IA64_CMPXCHG /* @@ -295,68 +311,13 @@ #define atomic_cmpset_64 atomic_cmpset_acq_64 #define atomic_cmpset_int atomic_cmpset_32 #define atomic_cmpset_long atomic_cmpset_64 +#define atomic_cmpset_ptr atomic_cmpset_64 #define atomic_cmpset_acq_int atomic_cmpset_acq_32 #define atomic_cmpset_rel_int atomic_cmpset_rel_32 #define atomic_cmpset_acq_long atomic_cmpset_acq_64 #define atomic_cmpset_rel_long atomic_cmpset_rel_64 - -static __inline int -atomic_cmpset_acq_ptr(volatile void *dst, void *exp, void *src) -{ - int ret; - ret = atomic_cmpset_acq_long((volatile u_long *)dst, (u_long)exp, - (u_long)src); - return (ret); -} - -static __inline int -atomic_cmpset_rel_ptr(volatile void *dst, void *exp, void *src) -{ - int ret; - ret = atomic_cmpset_rel_long((volatile u_long *)dst, (u_long)exp, - (u_long)src); - return (ret); -} - -#define atomic_cmpset_ptr atomic_cmpset_acq_ptr - -static __inline void * -atomic_load_acq_ptr(volatile void *p) -{ - return ((void *)atomic_load_acq_long((volatile u_long *)p)); -} - -static __inline void -atomic_store_rel_ptr(volatile void *p, void *v) -{ - atomic_store_rel_long((volatile u_long *)p, (u_long)v); -} - -#define ATOMIC_PTR(NAME) \ - static __inline void \ - atomic_##NAME##_ptr(volatile void *p, uintptr_t v) \ - { \ - atomic_##NAME##_long((volatile u_long *)p, v); \ - } \ - \ - static __inline void \ - atomic_##NAME##_acq_ptr(volatile void *p, uintptr_t v) \ - { \ - atomic_##NAME##_acq_long((volatile u_long *)p, v); \ - } \ - \ - static __inline void \ - atomic_##NAME##_rel_ptr(volatile void *p, uintptr_t v) \ - { \ - atomic_##NAME##_rel_long((volatile u_long *)p, v); \ - } - -ATOMIC_PTR(set) -ATOMIC_PTR(clear) -ATOMIC_PTR(add) -ATOMIC_PTR(subtract) - -#undef ATOMIC_PTR +#define atomic_cmpset_acq_ptr atomic_cmpset_acq_64 +#define atomic_cmpset_rel_ptr atomic_cmpset_rel_64 static __inline uint32_t atomic_readandclear_32(volatile uint32_t* p) ==== //depot/projects/smpng/sys/powerpc/include/atomic.h#10 (text+ko) ==== @@ -230,6 +230,11 @@ #define atomic_subtract_long(p, v) atomic_subtract_32((uint32_t *)p, (uint32_t)v) #define atomic_readandclear_long atomic_readandclear_32 +#define atomic_set_ptr atomic_set_32 +#define atomic_clear_ptr atomic_clear_32 +#define atomic_add_ptr atomic_add_32 +#define atomic_subtract_ptr atomic_subtract_32 + #if 0 /* See above. */ @@ -295,6 +300,15 @@ #define atomic_subtract_acq_long atomic_subtract_acq_32 #define atomic_subtract_rel_long atomic_subtract_rel_32 +#define atomic_set_acq_ptr atomic_set_acq_32 +#define atomic_set_rel_ptr atomic_set_rel_32 +#define atomic_clear_acq_ptr atomic_clear_acq_32 +#define atomic_clear_rel_ptr atomic_clear_rel_32 +#define atomic_add_acq_ptr atomic_add_acq_32 +#define atomic_add_rel_ptr atomic_add_rel_32 +#define atomic_subtract_acq_ptr atomic_subtract_acq_32 +#define atomic_subtract_rel_ptr atomic_subtract_rel_32 + #undef ATOMIC_ACQ_REL /* @@ -343,6 +357,9 @@ #define atomic_load_acq_long atomic_load_acq_32 #define atomic_store_rel_long atomic_store_rel_32 +#define atomic_load_acq_ptr atomic_load_acq_32 +#define atomic_store_rel_ptr atomic_store_rel_32 + #undef ATOMIC_STORE_LOAD /* @@ -400,19 +417,12 @@ #define atomic_cmpset_int atomic_cmpset_32 #define atomic_cmpset_long atomic_cmpset_32 +#define atomic_cmpset_ptr atomic_cmpset_32 #if 0 #define atomic_cmpset_long_long atomic_cmpset_64 #endif /* 0 */ -static __inline int -atomic_cmpset_ptr(volatile void *dst, void *exp, void *src) -{ - - return (atomic_cmpset_32((volatile uint32_t *)dst, (uint32_t)exp, - (uint32_t)src)); -} - static __inline uint32_t atomic_cmpset_acq_32(volatile uint32_t *p, uint32_t cmpval, uint32_t newval) { @@ -435,60 +445,7 @@ #define atomic_cmpset_rel_int atomic_cmpset_rel_32 #define atomic_cmpset_acq_long atomic_cmpset_acq_32 #define atomic_cmpset_rel_long atomic_cmpset_rel_32 - -static __inline int -atomic_cmpset_acq_ptr(volatile void *dst, void *exp, void *src) -{ +#define atomic_cmpset_acq_ptr atomic_cmpset_acq_32 +#define atomic_cmpset_rel_ptr atomic_cmpset_rel_32 - return (atomic_cmpset_acq_32((volatile uint32_t *)dst, - (uint32_t)exp, (uint32_t)src)); -} - -static __inline int -atomic_cmpset_rel_ptr(volatile void *dst, void *exp, void *src) -{ - - return (atomic_cmpset_rel_32((volatile uint32_t *)dst, - (uint32_t)exp, (uint32_t)src)); -} - -static __inline void * -atomic_load_acq_ptr(volatile void *p) -{ - - return (void *)atomic_load_acq_32((volatile uint32_t *)p); -} - -static __inline void -atomic_store_rel_ptr(volatile void *p, void *v) -{ - - atomic_store_rel_32((volatile uint32_t *)p, (uint32_t)v); -} - -#define ATOMIC_PTR(NAME) \ -static __inline void \ -atomic_##NAME##_ptr(volatile void *p, uintptr_t v) \ -{ \ - atomic_##NAME##_32((volatile uint32_t *)p, v); \ -} \ - \ -static __inline void \ -atomic_##NAME##_acq_ptr(volatile void *p, uintptr_t v) \ -{ \ - atomic_##NAME##_acq_32((volatile uint32_t *)p, v); \ -} \ - \ -static __inline void \ -atomic_##NAME##_rel_ptr(volatile void *p, uintptr_t v) \ -{ \ - atomic_##NAME##_rel_32((volatile uint32_t *)p, v); \ -} - -ATOMIC_PTR(set) -ATOMIC_PTR(clear) -ATOMIC_PTR(add) -ATOMIC_PTR(subtract) - -#undef ATOMIC_PTR #endif /* ! _MACHINE_ATOMIC_H_ */ ==== //depot/projects/smpng/sys/sparc64/include/atomic.h#10 (text+ko) ==== @@ -278,7 +278,7 @@ ATOMIC_GEN(long, u_long *, u_long, u_long, 64); ATOMIC_GEN(64, uint64_t *, uint64_t, uint64_t, 64); -ATOMIC_GEN(ptr, void *, void *, uintptr_t, 64); +ATOMIC_GEN(ptr, uintptr_t *, uintptr_t, uintptr_t, 64); #undef ATOMIC_GEN #undef atomic_cas
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200503301757.j2UHvuId054521>