Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Mar 2005 22:20:18 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 72666 for review
Message-ID:  <200503072220.j27MKI9E026790@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=72666

Change 72666 by jhb@jhb_slimer on 2005/03/07 22:19:49

	- Don't use +m.
	- Lose unneeded "memory" clobbers.
	- Add explicit "memory" clobbers to acq variants.  (XXX: this won't
	  take affect until the clobber is removed from powerpc_mb()).

Affected files ...

.. //depot/projects/smpng/sys/powerpc/include/atomic.h#6 edit

Differences ...

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

@@ -59,9 +59,9 @@
 		"or %0, %3, %0\n\t"		/* calculate new value */
 		"stwcx. %0, 0, %2\n\t"      	/* attempt to store */
 		"bne- 1b\n\t"			/* spin if failed */
-		: "=&r" (temp), "+m" (*p)
-		: "r" (p), "r" (v)
-		: "cc", "memory");
+		: "=&r" (temp), "=m" (*p)
+		: "r" (p), "r" (v), "m" (*p)
+		: "cc");
 #endif
 }
 
@@ -76,9 +76,9 @@
 		"andc %0, %0, %3\n\t"		/* calculate new value */
 		"stwcx. %0, 0, %2\n\t"      	/* attempt to store */
 		"bne- 1b\n\t"			/* spin if failed */
-		: "=&r" (temp), "+m" (*p)
-		: "r" (p), "r" (v)
-		: "cc", "memory");
+		: "=&r" (temp), "=m" (*p)
+		: "r" (p), "r" (v), "m" (*p)
+		: "cc");
 #endif
 }
 
@@ -93,9 +93,9 @@
 		"add %0, %3, %0\n\t"		/* calculate new value */
 		"stwcx. %0, 0, %2\n\t"      	/* attempt to store */
 		"bne- 1b\n\t"			/* spin if failed */
-		: "=&r" (temp), "+m" (*p)
-		: "r" (p), "r" (v)
-		: "cc", "memory");
+		: "=&r" (temp), "=m" (*p)
+		: "r" (p), "r" (v), "m" (*p)
+		: "cc");
 #endif
 }
 
@@ -110,9 +110,9 @@
 		"subf %0, %3, %0\n\t"		/* calculate new value */
 		"stwcx. %0, 0, %2\n\t"      	/* attempt to store */
 		"bne- 1b\n\t"			/* spin if failed */
-		: "=&r" (temp), "+m" (*p)
-		: "r" (p), "r" (v)
-		: "cc", "memory");
+		: "=&r" (temp), "=m" (*p)
+		: "r" (p), "r" (v), "m" (*p)
+		: "cc");
 #endif
 }
 
@@ -128,9 +128,9 @@
 		"li %1, 0\n\t"			/* load new value */
 		"stwcx. %1, 0, %3\n\t"      	/* attempt to store */
 		"bne- 1b\n\t"			/* spin if failed */
-		: "=&r"(result), "=&r"(temp), "+m" (*addr)
-		: "r" (addr)
-		: "cc", "memory");
+		: "=&r"(result), "=&r"(temp), "=m" (*addr)
+		: "r" (addr), "m" (*p)
+		: "cc");
 #endif
 
 	return (result);
@@ -244,6 +244,7 @@
 {									\
 	atomic_##NAME##_##WIDTH(p, v);					\
 	powerpc_mb();							\
+	__asm __volatile("" ::: "memory");				\
 }									\
 									\
 static __inline void							\
@@ -258,6 +259,7 @@
 {									\
 	atomic_##NAME##_##WIDTH(p, v);					\
 	powerpc_mb();							\
+	__asm __volatile("" ::: "memory");				\
 }									\
 									\
 static __inline void							\
@@ -302,6 +304,7 @@
 								\
 	v = *p;							\
 	powerpc_mb();						\
+	__asm __volatile("" ::: "memory");			\
 	return (v);						\
 }								\
 								\
@@ -361,9 +364,9 @@
 		"stwcx. %0, 0, %2\n\t"       	/* clear reservation (74xx) */
 		"li %0, 0\n\t"			/* failure - retval = 0 */
 		"3:\n\t"
-		: "=&r" (ret), "+m" (*p)
-		: "r" (p), "r" (cmpval), "r" (newval)
-		: "cc", "memory");
+		: "=&r" (ret), "=m" (*p)
+		: "r" (p), "r" (cmpval), "r" (newval), "m" (*p)
+		: "cc");
 #endif
 
 	return (ret);
@@ -413,6 +416,7 @@
 
 	retval = atomic_cmpset_32(p, cmpval, newval);
 	powerpc_mb();
+	__asm __volatile("" ::: "memory");
 	return (retval);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200503072220.j27MKI9E026790>