Skip site navigation (1)Skip section navigation (2)
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>