svn commit: r254290 - in projects/atomic64/sys: amd64/include i386/include
Jung-uk Kim
jkim at FreeBSD.org
Tue Aug 13 19:55:13 UTC 2013
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); \
} \
More information about the svn-src-projects
mailing list