projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[POWERPC] More DCR native fixups
[cascardo/linux.git]
/
include
/
asm-powerpc
/
atomic.h
diff --git
a/include/asm-powerpc/atomic.h
b/include/asm-powerpc/atomic.h
index
bb3c0ab
..
f038e33
100644
(file)
--- a/
include/asm-powerpc/atomic.h
+++ b/
include/asm-powerpc/atomic.h
@@
-27,8
+27,8
@@
static __inline__ void atomic_add(int a, atomic_t *v)
PPC405_ERR77(0,%3)
" stwcx. %0,0,%3 \n\
bne- 1b"
PPC405_ERR77(0,%3)
" stwcx. %0,0,%3 \n\
bne- 1b"
- : "=&r" (t), "
=
m" (v->counter)
- : "r" (a), "r" (&v->counter)
, "m" (v->counter)
+ : "=&r" (t), "
+
m" (v->counter)
+ : "r" (a), "r" (&v->counter)
: "cc");
}
: "cc");
}
@@
-63,8
+63,8
@@
static __inline__ void atomic_sub(int a, atomic_t *v)
PPC405_ERR77(0,%3)
" stwcx. %0,0,%3 \n\
bne- 1b"
PPC405_ERR77(0,%3)
" stwcx. %0,0,%3 \n\
bne- 1b"
- : "=&r" (t), "
=
m" (v->counter)
- : "r" (a), "r" (&v->counter)
, "m" (v->counter)
+ : "=&r" (t), "
+
m" (v->counter)
+ : "r" (a), "r" (&v->counter)
: "cc");
}
: "cc");
}
@@
-97,8
+97,8
@@
static __inline__ void atomic_inc(atomic_t *v)
PPC405_ERR77(0,%2)
" stwcx. %0,0,%2 \n\
bne- 1b"
PPC405_ERR77(0,%2)
" stwcx. %0,0,%2 \n\
bne- 1b"
- : "=&r" (t), "
=
m" (v->counter)
- : "r" (&v->counter)
, "m" (v->counter)
+ : "=&r" (t), "
+
m" (v->counter)
+ : "r" (&v->counter)
: "cc");
}
: "cc");
}
@@
-141,8
+141,8
@@
static __inline__ void atomic_dec(atomic_t *v)
PPC405_ERR77(0,%2)\
" stwcx. %0,0,%2\n\
bne- 1b"
PPC405_ERR77(0,%2)\
" stwcx. %0,0,%2\n\
bne- 1b"
- : "=&r" (t), "
=
m" (v->counter)
- : "r" (&v->counter)
, "m" (v->counter)
+ : "=&r" (t), "
+
m" (v->counter)
+ : "r" (&v->counter)
: "cc");
}
: "cc");
}
@@
-207,7
+207,8
@@
static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
/*
* Atomically test *v and decrement if it is greater than 0.
/*
* Atomically test *v and decrement if it is greater than 0.
- * The function returns the old value of *v minus 1.
+ * The function returns the old value of *v minus 1, even if
+ * the atomic variable, v, was not decremented.
*/
static __inline__ int atomic_dec_if_positive(atomic_t *v)
{
*/
static __inline__ int atomic_dec_if_positive(atomic_t *v)
{
@@
-216,14
+217,15
@@
static __inline__ int atomic_dec_if_positive(atomic_t *v)
__asm__ __volatile__(
LWSYNC_ON_SMP
"1: lwarx %0,0,%1 # atomic_dec_if_positive\n\
__asm__ __volatile__(
LWSYNC_ON_SMP
"1: lwarx %0,0,%1 # atomic_dec_if_positive\n\
- addic. %0,%0,-1\n\
+ cmpwi %0,1\n\
+ addi %0,%0,-1\n\
blt- 2f\n"
PPC405_ERR77(0,%1)
" stwcx. %0,0,%1\n\
bne- 1b"
ISYNC_ON_SMP
"\n\
blt- 2f\n"
PPC405_ERR77(0,%1)
" stwcx. %0,0,%1\n\
bne- 1b"
ISYNC_ON_SMP
"\n\
-2:" : "=&
r
" (t)
+2:" : "=&
b
" (t)
: "r" (&v->counter)
: "cc", "memory");
: "r" (&v->counter)
: "cc", "memory");
@@
-253,8
+255,8
@@
static __inline__ void atomic64_add(long a, atomic64_t *v)
add %0,%2,%0\n\
stdcx. %0,0,%3 \n\
bne- 1b"
add %0,%2,%0\n\
stdcx. %0,0,%3 \n\
bne- 1b"
- : "=&r" (t), "
=
m" (v->counter)
- : "r" (a), "r" (&v->counter)
, "m" (v->counter)
+ : "=&r" (t), "
+
m" (v->counter)
+ : "r" (a), "r" (&v->counter)
: "cc");
}
: "cc");
}
@@
-287,8
+289,8
@@
static __inline__ void atomic64_sub(long a, atomic64_t *v)
subf %0,%2,%0\n\
stdcx. %0,0,%3 \n\
bne- 1b"
subf %0,%2,%0\n\
stdcx. %0,0,%3 \n\
bne- 1b"
- : "=&r" (t), "
=
m" (v->counter)
- : "r" (a), "r" (&v->counter)
, "m" (v->counter)
+ : "=&r" (t), "
+
m" (v->counter)
+ : "r" (a), "r" (&v->counter)
: "cc");
}
: "cc");
}
@@
-319,8
+321,8
@@
static __inline__ void atomic64_inc(atomic64_t *v)
addic %0,%0,1\n\
stdcx. %0,0,%2 \n\
bne- 1b"
addic %0,%0,1\n\
stdcx. %0,0,%2 \n\
bne- 1b"
- : "=&r" (t), "
=
m" (v->counter)
- : "r" (&v->counter)
, "m" (v->counter)
+ : "=&r" (t), "
+
m" (v->counter)
+ : "r" (&v->counter)
: "cc");
}
: "cc");
}
@@
-361,8
+363,8
@@
static __inline__ void atomic64_dec(atomic64_t *v)
addic %0,%0,-1\n\
stdcx. %0,0,%2\n\
bne- 1b"
addic %0,%0,-1\n\
stdcx. %0,0,%2\n\
bne- 1b"
- : "=&r" (t), "
=
m" (v->counter)
- : "r" (&v->counter)
, "m" (v->counter)
+ : "=&r" (t), "
+
m" (v->counter)
+ : "r" (&v->counter)
: "cc");
}
: "cc");
}