PERFORCE change 76456 for review

John Baldwin jhb at FreeBSD.org
Tue May 3 13:40:34 PDT 2005


http://perforce.freebsd.org/chv.cgi?CH=76456

Change 76456 by jhb at jhb_slimer on 2005/05/03 20:40:16

	Rework long support by casting the pointer to make gcc happy.

Affected files ...

.. //depot/projects/smpng/sys/i386/include/atomic.h#31 edit

Differences ...

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

@@ -301,6 +301,17 @@
 #define atomic_cmpset_acq_int		atomic_cmpset_int
 #define atomic_cmpset_rel_int		atomic_cmpset_int
 
+#define	atomic_set_acq_long		atomic_set_long
+#define	atomic_set_rel_long		atomic_set_long
+#define	atomic_clear_acq_long		atomic_clear_long
+#define	atomic_clear_rel_long		atomic_clear_long
+#define	atomic_add_acq_long		atomic_add_long
+#define	atomic_add_rel_long		atomic_add_long
+#define	atomic_subtract_acq_long	atomic_subtract_long
+#define	atomic_subtract_rel_long	atomic_subtract_long
+#define atomic_cmpset_acq_long		atomic_cmpset_long
+#define atomic_cmpset_rel_long		atomic_cmpset_long
+
 /* Read the current value and store a zero in the destination. */
 #ifdef __GNUCLIKE_ASM
 
@@ -320,25 +331,8 @@
 	return (result);
 }
 
-static __inline u_long
-atomic_readandclear_long(volatile u_long *addr)
-{
-	u_long result;
-
-	__asm __volatile (
-	"	xorl	%0,%0 ;		"
-	"	xchgl	%1,%0 ;		"
-	"# atomic_readandclear_int"
-	: "=&r" (result),		/* 0 (result) */
-	  "=m" (*addr)			/* 1 (addr) */
-	: "m" (*addr));			/* 2 (addr) */
-
-	return (result);
-}
-
 #else /* !__GNUCLIKE_ASM */
 
-extern u_long	atomic_readandclear_long(volatile u_long *);
 extern u_int	atomic_readandclear_int(volatile u_int *);
 
 #endif /* __GNUCLIKE_ASM */
@@ -396,24 +390,14 @@
 #define	atomic_readandclear_32	atomic_readandclear_int
 
 /* Operations on longs. */
-#define	atomic_set_long		atomic_set_int
-#define	atomic_set_acq_long	atomic_set_acq_int
-#define	atomic_set_rel_long	atomic_set_rel_int
-#define	atomic_clear_long	atomic_clear_int
-#define	atomic_clear_acq_long	atomic_clear_acq_int
-#define	atomic_clear_rel_long	atomic_clear_rel_int
-#define	atomic_add_long		atomic_add_int
-#define	atomic_add_acq_long	atomic_add_acq_int
-#define	atomic_add_rel_long	atomic_add_rel_int
-#define	atomic_subtract_long	atomic_subtract_int
-#define	atomic_subtract_acq_long	atomic_subtract_acq_int
-#define	atomic_subtract_rel_long	atomic_subtract_rel_int
-#define	atomic_cmpset_long	atomic_cmpset_int
-#define	atomic_cmpset_acq_long	atomic_cmpset_acq_int
-#define	atomic_cmpset_rel_long	atomic_cmpset_rel_int
-#define	atomic_load_acq_long	atomic_load_acq_int
-#define	atomic_store_rel_long	atomic_store_rel_int
-#define	atomic_readandclear_long	atomic_readandclear_int
+#define	atomic_set_long(p, v)		atomic_set_int((u_int *)(p), (v))
+#define	atomic_clear_long(p, v)		atomic_clear_int((u_int *)(p), (v))
+#define	atomic_add_long(p, v)		atomic_add_int((u_int *)(p), (v))
+#define	atomic_subtract_long(p, v)	atomic_subtract_int((u_int *)(p), (v))
+#define	atomic_cmpset_long(d, e, s)	atomic_cmpset_int((u_int *)(d), (e), (s))
+#define	atomic_load_acq_long(p)		atomic_load_acq_int((u_int *)(p))
+#define	atomic_store_rel_long(p, v)	atomic_store_rel_int((u_int *)(p), (v))
+#define	atomic_readandclear_long(p)	atomic_readandclear_int((u_int *)(p))
 
 /* Operations on pointers. */
 #define	atomic_set_ptr		atomic_set_int


More information about the p4-projects mailing list