PERFORCE change 74112 for review
John Baldwin
jhb at FreeBSD.org
Wed Mar 30 09:57:57 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=74112
Change 74112 by jhb at 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
More information about the p4-projects
mailing list