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