Skip site navigation (1)Skip section navigation (2)
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>