PERFORCE change 72662 for review
John Baldwin
jhb at FreeBSD.org
Mon Mar 7 13:46:37 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=72662
Change 72662 by jhb at jhb_slimer on 2005/03/07 21:46:07
Move acq barriers back to being after the operation (alc@), and
reduce duplication in amd64 versions by moving the membars out
of the atomic op __asm().
Affected files ...
.. //depot/projects/smpng/sys/alpha/include/atomic.h#11 edit
.. //depot/projects/smpng/sys/amd64/include/atomic.h#8 edit
Differences ...
==== //depot/projects/smpng/sys/alpha/include/atomic.h#11 (text+ko) ====
@@ -228,9 +228,9 @@
static __inline void \
atomic_##NAME##_acq_##WIDTH(volatile u_int##WIDTH##_t *p, u_int##WIDTH##_t v)\
{ \
+ atomic_##NAME##_##WIDTH(p, v); \
alpha_mb(); \
__asm __volatile("" ::: "memory"); \
- atomic_##NAME##_##WIDTH(p, v); \
} \
\
static __inline void \
@@ -243,9 +243,9 @@
static __inline void \
atomic_##NAME##_acq_##TYPE(volatile u_int##WIDTH##_t *p, u_int##WIDTH##_t v)\
{ \
+ atomic_##NAME##_##WIDTH(p, v); \
alpha_mb(); \
__asm __volatile("" ::: "memory"); \
- atomic_##NAME##_##WIDTH(p, v); \
} \
\
static __inline void \
@@ -283,9 +283,9 @@
{ \
u_##TYPE v; \
\
+ v = *p; \
alpha_mb(); \
__asm __volatile("" ::: "memory"); \
- v = *p; \
return (v); \
} \
\
@@ -301,9 +301,9 @@
{ \
u_##TYPE v; \
\
+ v = *p; \
alpha_mb(); \
__asm __volatile("" ::: "memory"); \
- v = *p; \
return (v); \
} \
\
@@ -389,9 +389,9 @@
{
int retval;
+ retval = atomic_cmpset_32(p, cmpval, newval);
alpha_mb();
__asm __volatile("" ::: "memory");
- retval = atomic_cmpset_32(p, cmpval, newval);
return (retval);
}
@@ -407,9 +407,9 @@
{
int retval;
+ retval = atomic_cmpset_64(p, cmpval, newval);
alpha_mb();
__asm __volatile("" ::: "memory");
- retval = atomic_cmpset_64(p, cmpval, newval);
return (retval);
}
==== //depot/projects/smpng/sys/amd64/include/atomic.h#8 (text+ko) ====
@@ -110,18 +110,15 @@
static __inline void \
atomic_##NAME##_##TYPE##_acq(volatile u_##TYPE *p, u_##TYPE v)\
{ \
- __asm __volatile(MPLFENCE MPLOCKED OP \
- : "=m" (*p) \
- : CONS (V), "m" (*p) \
- : "memory"); \
+ atomic_##NAME_##TYPE(p, v); \
+ __asm __volatile(MPLFENCE ::: "memory"); \
} \
\
static __inline void \
atomic_##NAME##_##TYPE##_rel(volatile u_##TYPE *p, u_##TYPE v)\
{ \
- __asm __volatile(MPSFENCE MPLOCKED OP \
- : "=m" (*p) \
- : CONS (V), "m" (*p)); \
+ __asm __volatile(MPSFENCE); \
+ atomic_##NAME_##TYPE(p, v); \
} \
struct __hack
@@ -186,8 +183,11 @@
static __inline int \
atomic_cmpset_acq_##TYPE(volatile u_##TYPE *dst, u_##TYPE exp, u_##TYPE src)\
{ \
+ int retval; \
+ \
+ retval = atomic_cmpset_##TYPE(dst, exp, src); \
__asm __volatile(MPLFENCE ::: "memory"); \
- return (atomic_cmpset_##TYPE(dst, exp, src); \
+ return (retval); \
} \
\
static __inline int \
More information about the p4-projects
mailing list