Commit c8a91c28 authored by Heiko Carstens's avatar Heiko Carstens

s390/atomic: move remaining inline assemblies to atomic_ops.h

Move all remaining inline assemblies from atomic.h to
atomic_ops.h. That way all atomic inline assemblies are
contained within only a single header file.
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
parent 6000b5f4
...@@ -17,19 +17,12 @@ ...@@ -17,19 +17,12 @@
static inline int atomic_read(const atomic_t *v) static inline int atomic_read(const atomic_t *v)
{ {
int c; return __atomic_read(v);
asm volatile(
" l %0,%1\n"
: "=d" (c) : "Q" (v->counter));
return c;
} }
static inline void atomic_set(atomic_t *v, int i) static inline void atomic_set(atomic_t *v, int i)
{ {
asm volatile( __atomic_set(v, i);
" st %1,%0\n"
: "=Q" (v->counter) : "d" (i));
} }
static inline int atomic_add_return(int i, atomic_t *v) static inline int atomic_add_return(int i, atomic_t *v)
...@@ -78,19 +71,12 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new) ...@@ -78,19 +71,12 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
static inline s64 atomic64_read(const atomic64_t *v) static inline s64 atomic64_read(const atomic64_t *v)
{ {
s64 c; return __atomic64_read(v);
asm volatile(
" lg %0,%1\n"
: "=d" (c) : "Q" (v->counter));
return c;
} }
static inline void atomic64_set(atomic64_t *v, s64 i) static inline void atomic64_set(atomic64_t *v, s64 i)
{ {
asm volatile( __atomic64_set(v, i);
" stg %1,%0\n"
: "=Q" (v->counter) : "d" (i));
} }
static inline s64 atomic64_add_return(s64 i, atomic64_t *v) static inline s64 atomic64_add_return(s64 i, atomic64_t *v)
......
...@@ -8,6 +8,40 @@ ...@@ -8,6 +8,40 @@
#ifndef __ARCH_S390_ATOMIC_OPS__ #ifndef __ARCH_S390_ATOMIC_OPS__
#define __ARCH_S390_ATOMIC_OPS__ #define __ARCH_S390_ATOMIC_OPS__
static inline int __atomic_read(const atomic_t *v)
{
int c;
asm volatile(
" l %0,%1\n"
: "=d" (c) : "Q" (v->counter));
return c;
}
static inline void __atomic_set(atomic_t *v, int i)
{
asm volatile(
" st %1,%0\n"
: "=Q" (v->counter) : "d" (i));
}
static inline s64 __atomic64_read(const atomic64_t *v)
{
s64 c;
asm volatile(
" lg %0,%1\n"
: "=d" (c) : "Q" (v->counter));
return c;
}
static inline void __atomic64_set(atomic64_t *v, s64 i)
{
asm volatile(
" stg %1,%0\n"
: "=Q" (v->counter) : "d" (i));
}
#ifdef CONFIG_HAVE_MARCH_Z196_FEATURES #ifdef CONFIG_HAVE_MARCH_Z196_FEATURES
#define __ATOMIC_OP(op_name, op_type, op_string, op_barrier) \ #define __ATOMIC_OP(op_name, op_type, op_string, op_barrier) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment