Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Jul 2005 17:21:22 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 80465 for review
Message-ID:  <200507181721.j6IHLMIB065538@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=80465

Change 80465 by jhb@jhb_slimer on 2005/07/18 17:20:49

	Merge in some fixes made possible by atomic_foo_ptr().

Affected files ...

.. //depot/projects/smpng/sys/arm/include/atomic.h#16 edit
.. //depot/projects/smpng/sys/arm/include/endian.h#12 edit
.. //depot/projects/smpng/sys/sparc64/include/cpufunc.h#25 edit

Differences ...

==== //depot/projects/smpng/sys/arm/include/atomic.h#16 (text+ko) ====

@@ -77,8 +77,10 @@
 static __inline uint32_t
 __swp(uint32_t val, volatile uint32_t *ptr)
 {
-	__asm __volatile("swp	%0, %1, [%2]"
-	    : "=&r" (val) : "r" (val) , "r" (ptr) : "memory");
+	__asm __volatile("swp	%0, %2, [%3]"
+	    : "=&r" (val), "=m" (*ptr)
+	    : "r" (val) , "r" (ptr), "m" (*ptr)
+	    : "memory");
 	return (val);
 }
 

==== //depot/projects/smpng/sys/arm/include/endian.h#12 (text+ko) ====

@@ -100,11 +100,10 @@
 __bswap16_var(__uint16_t v)
 {
 	__asm __volatile(
-	    "mov    %0, %1, ror #8\n"
+	    "mov    %0, %0, ror #8\n"
 	    "orr    %0, %0, %0, lsr #16\n"
 	    "bic    %0, %0, %0, lsl #16"
-	    : "=r" (v)
-	    : "0" (v));
+	    : "+r" (v));
 	
 	return (v);
 }		

==== //depot/projects/smpng/sys/sparc64/include/cpufunc.h#25 (text+ko) ====

@@ -62,15 +62,17 @@
 
 #define	casa(rs1, rs2, rd, asi) ({					\
 	u_int __rd = (uint32_t)(rd);					\
-	__asm __volatile("casa [%1] %2, %3, %0"				\
-	    : "+r" (__rd) : "r" (rs1), "n" (asi), "r" (rs2));		\
+	__asm __volatile("casa [%2] %3, %4, %0"				\
+	    : "+r" (__rd), "=m" (*rs1)					\
+	    : "r" (rs1), "n" (asi), "r" (rs2), "m" (*rs1));		\
 	__rd;								\
 })
 
 #define	casxa(rs1, rs2, rd, asi) ({					\
 	u_long __rd = (uint64_t)(rd);					\
-	__asm __volatile("casxa [%1] %2, %3, %0"			\
-	    : "+r" (__rd) : "r" (rs1), "n" (asi), "r" (rs2));		\
+	__asm __volatile("casxa [%2] %3, %4, %0"			\
+	    : "+r" (__rd), "=m" (*rs1)					\
+	    : "r" (rs1), "n" (asi), "r" (rs2), "m" (*rs1));		\
 	__rd;								\
 })
 



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