PERFORCE change 74109 for review

John Baldwin jhb at FreeBSD.org
Wed Mar 30 07:35:05 PST 2005


http://perforce.freebsd.org/chv.cgi?CH=74109

Change 74109 by jhb at jhb_slimer on 2005/03/30 15:34:06

	Use macro mappings for all of char, int, short. long, ptr to the
	appropriate atomic_XX variants.  This also changes ptr to operate
	on uintptr_t's.

Affected files ...

.. //depot/projects/smpng/sys/alpha/include/atomic.h#16 edit

Differences ...

==== //depot/projects/smpng/sys/alpha/include/atomic.h#16 (text+ko) ====

@@ -206,28 +206,6 @@
 	return result;
 }
 
-#define atomic_set_char		atomic_set_8
-#define atomic_clear_char	atomic_clear_8
-#define atomic_add_char		atomic_add_8
-#define atomic_subtract_char	atomic_subtract_8
-
-#define atomic_set_short	atomic_set_16
-#define atomic_clear_short	atomic_clear_16
-#define atomic_add_short	atomic_add_16
-#define atomic_subtract_short	atomic_subtract_16
-
-#define atomic_set_int		atomic_set_32
-#define atomic_clear_int	atomic_clear_32
-#define atomic_add_int		atomic_add_32
-#define atomic_subtract_int	atomic_subtract_32
-#define atomic_readandclear_int	atomic_readandclear_32
-
-#define atomic_set_long		atomic_set_64
-#define atomic_clear_long	atomic_clear_64
-#define atomic_add_long		atomic_add_64
-#define atomic_subtract_long	atomic_subtract_64
-#define atomic_readandclear_long	atomic_readandclear_64
-
 #define ATOMIC_ACQ_REL(NAME, WIDTH, TYPE)				\
 static __inline void							\
 atomic_##NAME##_acq_##WIDTH(volatile u_int##WIDTH##_t *p, u_int##WIDTH##_t v)\
@@ -242,23 +220,9 @@
 {									\
 	alpha_wmb();							\
 	atomic_##NAME##_##WIDTH(p, v);					\
-}									\
-									\
-static __inline void							\
-atomic_##NAME##_acq_##TYPE(volatile u_int##WIDTH##_t *p, u_int##WIDTH##_t v)\
-{									\
-	atomic_##NAME##_##WIDTH(p, v);					\
-	alpha_mb();							\
-	__asm __volatile("" ::: "memory");				\
-}									\
-									\
-static __inline void							\
-atomic_##NAME##_rel_##TYPE(volatile u_int##WIDTH##_t *p, u_int##WIDTH##_t v)\
-{									\
-	alpha_wmb();							\
-	atomic_##NAME##_##WIDTH(p, v);					\
 }
 
+/* Variants of simple arithmetic with memory barriers. */
 ATOMIC_ACQ_REL(set, 8, char)
 ATOMIC_ACQ_REL(clear, 8, char)
 ATOMIC_ACQ_REL(add, 8, char)
@@ -298,30 +262,12 @@
 {							\
 	alpha_wmb();					\
 	*p = v;						\
-}							\
-							\
-static __inline u_##TYPE				\
-atomic_load_acq_##TYPE(volatile u_##TYPE *p)		\
-{							\
-	u_##TYPE v;					\
-							\
-	v = *p;						\
-	alpha_mb();					\
-	__asm __volatile("" ::: "memory");		\
-	return (v);					\
-}							\
-							\
-static __inline void					\
-atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\
-{							\
-	alpha_wmb();					\
-	*p = v;						\
 }
 
-ATOMIC_STORE_LOAD(char,		8)
-ATOMIC_STORE_LOAD(short,	16)
-ATOMIC_STORE_LOAD(int,		32)
-ATOMIC_STORE_LOAD(long,		64)
+ATOMIC_STORE_LOAD(8)
+ATOMIC_STORE_LOAD(16)
+ATOMIC_STORE_LOAD(32)
+ATOMIC_STORE_LOAD(64)
 
 #undef ATOMIC_STORE_LOAD
 
@@ -377,17 +323,6 @@
 	return ret;
 }
 
-#define	atomic_cmpset_int	atomic_cmpset_32
-#define	atomic_cmpset_long	atomic_cmpset_64
-
-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 u_int32_t
 atomic_cmpset_acq_32(volatile u_int32_t *p, u_int32_t cmpval, u_int32_t newval)
 {
@@ -424,63 +359,94 @@
 	return (atomic_cmpset_64(p, cmpval, newval));
 }
 
+/* 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
+#define atomic_clear_char	atomic_clear_8
+#define atomic_clear_acq_char	atomic_clear_acq_8
+#define atomic_clear_rel_char	atomic_clear_rel_8
+#define atomic_add_char		atomic_add_8
+#define atomic_add_acq_char	atomic_add_acq_8
+#define atomic_add_rel_char	atomic_add_rel_8
+#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
+
+/* 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
+#define atomic_clear_short	atomic_clear_16
+#define atomic_clear_acq_short	atomic_clear_acq_16
+#define atomic_clear_rel_short	atomic_clear_rel_16
+#define atomic_add_short	atomic_add_16
+#define atomic_add_acq_short	atomic_add_acq_16
+#define atomic_add_rel_short	atomic_add_rel_16
+#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
+
+/* 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
+#define atomic_clear_int	atomic_clear_32
+#define atomic_clear_acq_int	atomic_clear_acq_32
+#define atomic_clear_rel_int	atomic_clear_rel_32
+#define atomic_add_int		atomic_add_32
+#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_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
+
+/* 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
+#define atomic_clear_long	atomic_clear_64
+#define atomic_clear_acq_long	atomic_clear_acq_64
+#define atomic_clear_rel_long	atomic_clear_rel_64
+#define atomic_add_long		atomic_add_64
+#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_cmpset_long	atomic_cmpset_64
 #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)
-{
-
-        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)
-{
-	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
+/* 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
+#define atomic_clear_ptr	atomic_clear_64
+#define atomic_clear_acq_ptr	atomic_clear_acq_64
+#define atomic_clear_rel_ptr	atomic_clear_rel_64
+#define atomic_add_ptr		atomic_add_64
+#define atomic_add_acq_ptr	atomic_add_acq_64
+#define atomic_add_rel_ptr	atomic_add_rel_64
+#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
 
 #endif /* ! _MACHINE_ATOMIC_H_ */


More information about the p4-projects mailing list