Skip to content

Commit

Permalink
powerpc: Tell gcc when we clobber the carry in inline asm
Browse files Browse the repository at this point in the history
We have several instances of inline assembly code that use the addic
or addic. instructions, but don't include XER in the list of clobbers.
The addic and addic. instructions affect the carry bit, which is in
the XER register.

This adds "xer" to the list of clobbers for those inline asm
statements that use addic or addic. and didn't already have it.

Signed-off-by: Paul Mackerras <paulus@samba.org>
  • Loading branch information
Paul Mackerras committed Nov 19, 2008
1 parent d5e5491 commit efc3624
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 12 deletions.
18 changes: 9 additions & 9 deletions arch/powerpc/include/asm/atomic.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ static __inline__ void atomic_inc(atomic_t *v)
bne- 1b"
: "=&r" (t), "+m" (v->counter)
: "r" (&v->counter)
: "cc");
: "cc", "xer");
}

static __inline__ int atomic_inc_return(atomic_t *v)
Expand All @@ -128,7 +128,7 @@ static __inline__ int atomic_inc_return(atomic_t *v)
ISYNC_ON_SMP
: "=&r" (t)
: "r" (&v->counter)
: "cc", "memory");
: "cc", "xer", "memory");

return t;
}
Expand All @@ -155,7 +155,7 @@ static __inline__ void atomic_dec(atomic_t *v)
bne- 1b"
: "=&r" (t), "+m" (v->counter)
: "r" (&v->counter)
: "cc");
: "cc", "xer");
}

static __inline__ int atomic_dec_return(atomic_t *v)
Expand All @@ -172,7 +172,7 @@ static __inline__ int atomic_dec_return(atomic_t *v)
ISYNC_ON_SMP
: "=&r" (t)
: "r" (&v->counter)
: "cc", "memory");
: "cc", "xer", "memory");

return t;
}
Expand Down Expand Up @@ -346,7 +346,7 @@ static __inline__ void atomic64_inc(atomic64_t *v)
bne- 1b"
: "=&r" (t), "+m" (v->counter)
: "r" (&v->counter)
: "cc");
: "cc", "xer");
}

static __inline__ long atomic64_inc_return(atomic64_t *v)
Expand All @@ -362,7 +362,7 @@ static __inline__ long atomic64_inc_return(atomic64_t *v)
ISYNC_ON_SMP
: "=&r" (t)
: "r" (&v->counter)
: "cc", "memory");
: "cc", "xer", "memory");

return t;
}
Expand All @@ -388,7 +388,7 @@ static __inline__ void atomic64_dec(atomic64_t *v)
bne- 1b"
: "=&r" (t), "+m" (v->counter)
: "r" (&v->counter)
: "cc");
: "cc", "xer");
}

static __inline__ long atomic64_dec_return(atomic64_t *v)
Expand All @@ -404,7 +404,7 @@ static __inline__ long atomic64_dec_return(atomic64_t *v)
ISYNC_ON_SMP
: "=&r" (t)
: "r" (&v->counter)
: "cc", "memory");
: "cc", "xer", "memory");

return t;
}
Expand All @@ -431,7 +431,7 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v)
"\n\
2:" : "=&r" (t)
: "r" (&v->counter)
: "cc", "memory");
: "cc", "xer", "memory");

return t;
}
Expand Down
4 changes: 2 additions & 2 deletions arch/powerpc/include/asm/local.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ static __inline__ long local_inc_return(local_t *l)
bne- 1b"
: "=&r" (t)
: "r" (&(l->a.counter))
: "cc", "memory");
: "cc", "xer", "memory");

return t;
}
Expand All @@ -94,7 +94,7 @@ static __inline__ long local_dec_return(local_t *l)
bne- 1b"
: "=&r" (t)
: "r" (&(l->a.counter))
: "cc", "memory");
: "cc", "xer", "memory");

return t;
}
Expand Down
2 changes: 1 addition & 1 deletion arch/powerpc/include/asm/spinlock.h
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ static inline void __raw_read_unlock(raw_rwlock_t *rw)
bne- 1b"
: "=&r"(tmp)
: "r"(&rw->lock)
: "cr0", "memory");
: "cr0", "xer", "memory");
}

static inline void __raw_write_unlock(raw_rwlock_t *rw)
Expand Down

0 comments on commit efc3624

Please sign in to comment.