Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Aug 2013 19:55:12 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r254290 - in projects/atomic64/sys: amd64/include i386/include
Message-ID:  <201308131955.r7DJtCLg066415@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkim
Date: Tue Aug 13 19:55:12 2013
New Revision: 254290
URL: http://svnweb.freebsd.org/changeset/base/254290

Log:
  Re-add "memory" back to clobber lists where CMPXCHG instructions are used.
  Note this instruction with LOCK prefix implicitly serializes load/store.

Modified:
  projects/atomic64/sys/amd64/include/atomic.h
  projects/atomic64/sys/i386/include/atomic.h

Modified: projects/atomic64/sys/amd64/include/atomic.h
==============================================================================
--- projects/atomic64/sys/amd64/include/atomic.h	Tue Aug 13 19:20:50 2013	(r254289)
+++ projects/atomic64/sys/amd64/include/atomic.h	Tue Aug 13 19:55:12 2013	(r254290)
@@ -149,7 +149,7 @@ atomic_cmpset_int(volatile u_int *dst, u
 	  "+m" (*dst),			/* 1 */
 	  "+a" (expect)			/* 2 */
 	: "r" (src)			/* 3 */
-	: "cc");
+	: "memory", "cc");
 
 	return (res);
 }
@@ -168,7 +168,7 @@ atomic_cmpset_long(volatile u_long *dst,
 	  "+m" (*dst),			/* 1 */
 	  "+a" (expect)			/* 2 */
 	: "r" (src)			/* 3 */
-	: "cc");
+	: "memory", "cc");
 
 	return (res);
 }
@@ -288,7 +288,7 @@ atomic_load_acq_##TYPE(volatile u_##TYPE
 	__asm __volatile(MPLOCKED LOP			\
 	: "=a" (res),			/* 0 */		\
 	  "+m" (*p)			/* 1 */		\
-	: : "cc");					\
+	: : "memory", "cc");				\
 							\
 	return (res);					\
 }							\

Modified: projects/atomic64/sys/i386/include/atomic.h
==============================================================================
--- projects/atomic64/sys/i386/include/atomic.h	Tue Aug 13 19:20:50 2013	(r254289)
+++ projects/atomic64/sys/i386/include/atomic.h	Tue Aug 13 19:55:12 2013	(r254290)
@@ -211,7 +211,7 @@ atomic_cmpset_64_i586(volatile uint64_t 
 	  "+A" (expect)			/* 2 */
 	: "b" ((uint32_t)src),		/* 3 */
 	  "c" ((uint32_t)(src >> 32))	/* 4 */
-	: "cc");
+	: "memory", "cc");
 	return (res);
 }
 
@@ -227,7 +227,7 @@ atomic_load_acq_64_i586(volatile uint64_
 	"	cmpxchg8b %1"
 	: "=&A" (res),			/* 0 */
 	  "+m" (*p)			/* 1 */
-	: : "cc");
+	: : "memory", "cc");
 	return (res);
 }
 
@@ -244,7 +244,7 @@ atomic_store_rel_64_i586(volatile uint64
 	"	jne	1b"
 	: "+m" (*p),			/* 0 */
 	  "+A" (v)			/* 1 */
-	: : "ebx", "ecx", "cc");
+	: : "ebx", "ecx", "memory", "cc");
 }
 
 static __inline uint64_t
@@ -260,7 +260,7 @@ atomic_swap_64_i586(volatile uint64_t *p
 	"	jne	1b"
 	: "+m" (*p),			/* 0 */
 	  "+A" (v)			/* 1 */
-	: : "ebx", "ecx", "cc");
+	: : "ebx", "ecx", "memory", "cc");
 	return (v);
 }
 
@@ -320,7 +320,7 @@ atomic_cmpset_int(volatile u_int *dst, u
 	  "+m" (*dst),			/* 1 */
 	  "+a" (expect)			/* 2 */
 	: "r" (src)			/* 3 */
-	: "cc");
+	: "memory", "cc");
 
 	return (res);
 }
@@ -410,7 +410,7 @@ atomic_load_acq_##TYPE(volatile u_##TYPE
 	__asm __volatile(MPLOCKED LOP			\
 	: "=a" (res),			/* 0 */		\
 	  "+m" (*p)			/* 1 */		\
-	: : "cc");				\
+	: : "memory", "cc");				\
 							\
 	return (res);					\
 }							\



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