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>