PERFORCE change 72662 for review

John Baldwin jhb at FreeBSD.org
Mon Mar 7 13:46:37 PST 2005


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

Change 72662 by jhb at jhb_slimer on 2005/03/07 21:46:07

	Move acq barriers back to being after the operation (alc@), and
	reduce duplication in amd64 versions by moving the membars out
	of the atomic op __asm().

Affected files ...

.. //depot/projects/smpng/sys/alpha/include/atomic.h#11 edit
.. //depot/projects/smpng/sys/amd64/include/atomic.h#8 edit

Differences ...

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

@@ -228,9 +228,9 @@
 static __inline void							\
 atomic_##NAME##_acq_##WIDTH(volatile u_int##WIDTH##_t *p, u_int##WIDTH##_t v)\
 {									\
+	atomic_##NAME##_##WIDTH(p, v);					\
 	alpha_mb(); 							\
 	__asm __volatile("" ::: "memory");				\
-	atomic_##NAME##_##WIDTH(p, v);					\
 }									\
 									\
 static __inline void							\
@@ -243,9 +243,9 @@
 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");				\
-	atomic_##NAME##_##WIDTH(p, v);					\
 }									\
 									\
 static __inline void							\
@@ -283,9 +283,9 @@
 {							\
 	u_##TYPE v;					\
 							\
+	v = *p;						\
 	alpha_mb();					\
 	__asm __volatile("" ::: "memory");		\
-	v = *p;						\
 	return (v);					\
 }							\
 							\
@@ -301,9 +301,9 @@
 {							\
 	u_##TYPE v;					\
 							\
+	v = *p;						\
 	alpha_mb();					\
 	__asm __volatile("" ::: "memory");		\
-	v = *p;						\
 	return (v);					\
 }							\
 							\
@@ -389,9 +389,9 @@
 {
 	int retval;
 
+	retval = atomic_cmpset_32(p, cmpval, newval);
 	alpha_mb();
 	__asm __volatile("" ::: "memory");
-	retval = atomic_cmpset_32(p, cmpval, newval);
 	return (retval);
 }
 
@@ -407,9 +407,9 @@
 {
 	int retval;
 
+	retval = atomic_cmpset_64(p, cmpval, newval);
 	alpha_mb();
 	__asm __volatile("" ::: "memory");
-	retval = atomic_cmpset_64(p, cmpval, newval);
 	return (retval);
 }
 

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

@@ -110,18 +110,15 @@
 static __inline void					\
 atomic_##NAME##_##TYPE##_acq(volatile u_##TYPE *p, u_##TYPE v)\
 {							\
-	__asm __volatile(MPLFENCE MPLOCKED OP		\
-			 : "=m" (*p)			\
-			 : CONS (V), "m" (*p)		\
-			 : "memory");			\
+	atomic_##NAME_##TYPE(p, v);			\
+	__asm __volatile(MPLFENCE ::: "memory");	\
 }							\
 							\
 static __inline void					\
 atomic_##NAME##_##TYPE##_rel(volatile u_##TYPE *p, u_##TYPE v)\
 {							\
-	__asm __volatile(MPSFENCE MPLOCKED OP		\
-			 : "=m" (*p)			\
-			 : CONS (V), "m" (*p));		\
+	__asm __volatile(MPSFENCE);			\
+	atomic_##NAME_##TYPE(p, v);			\
 }							\
 struct __hack
 
@@ -186,8 +183,11 @@
 static __inline int					\
 atomic_cmpset_acq_##TYPE(volatile u_##TYPE *dst, u_##TYPE exp, u_##TYPE src)\
 {							\
+	int retval;					\
+							\
+	retval = atomic_cmpset_##TYPE(dst, exp, src);	\
 	__asm __volatile(MPLFENCE ::: "memory");	\
-	return (atomic_cmpset_##TYPE(dst, exp, src);	\
+	return (retval);				\
 }							\
 							\
 static __inline int					\


More information about the p4-projects mailing list