Date: Fri, 16 Aug 2013 00:24:34 +0000 (UTC) From: Jung-uk Kim <jkim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r254394 - projects/atomic64/sys/i386/include Message-ID: <201308160024.r7G0OY74089153@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jkim Date: Fri Aug 16 00:24:34 2013 New Revision: 254394 URL: http://svnweb.freebsd.org/changeset/base/254394 Log: Micro-optimize atomic_cmpset_64_i386(). Modified: projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Fri Aug 16 00:14:52 2013 (r254393) +++ projects/atomic64/sys/i386/include/atomic.h Fri Aug 16 00:24:34 2013 (r254394) @@ -297,6 +297,7 @@ static __inline int atomic_cmpset_64_i386(volatile uint64_t *dst, uint64_t expect, uint64_t src) { volatile uint32_t *p; + u_char res; p = (volatile uint32_t *)dst; __asm __volatile( @@ -305,21 +306,21 @@ atomic_cmpset_64_i386(volatile uint64_t " xorl %1, %%eax ; " " xorl %2, %%edx ; " " orl %%edx, %%eax ; " - " sete %%al ; " - " movzbl %%al, %%eax ; " " jne 1f ; " - " movl %3, %1 ; " - " movl %4, %2 ; " + " movl %4, %1 ; " + " movl %5, %2 ; " "1: " + " sete %3 ; " " popfl" : "+A" (expect), /* 0 */ "+m" (*p), /* 1 */ - "+m" (*(p + 1)) /* 2 */ - : "r" ((uint32_t)src), /* 3 */ - "r" ((uint32_t)(src >> 32)) /* 4 */ + "+m" (*(p + 1)), /* 2 */ + "=q" (res) /* 3 */ + : "r" ((uint32_t)src), /* 4 */ + "r" ((uint32_t)(src >> 32)) /* 5 */ : "memory", "cc"); - return (expect); + return (res); } static __inline uint64_t
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201308160024.r7G0OY74089153>