Changeset 73a4bab in mainline for arch/ia32/include


Ignore:
Timestamp:
2005-11-11T14:06:55Z (20 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
8a0b3730
Parents:
0172eba
Message:

Atomic inc & dec functions synchronized on all ia32,ia64 and mips platforms. Now there are 3 versions which returns no value, new value and old value och changed variable.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ia32/include/atomic.h

    r0172eba r73a4bab  
    3636static inline void atomic_inc(atomic_t *val) {
    3737#ifdef CONFIG_SMP
    38         __asm__ volatile ("lock incl %0\n" : "=m" (*val));
     38        __asm__ volatile ("lock incl %0\n" : "+m" (*val));
    3939#else
    40         __asm__ volatile ("incl %0\n" : "=m" (*val));
     40        __asm__ volatile ("incl %0\n" : "+m" (*val));
    4141#endif /* CONFIG_SMP */
    4242}
     
    4444static inline void atomic_dec(atomic_t *val) {
    4545#ifdef CONFIG_SMP
    46         __asm__ volatile ("lock decl %0\n" : "=m" (*val));
     46        __asm__ volatile ("lock decl %0\n" : "+m" (*val));
    4747#else
    48         __asm__ volatile ("decl %0\n" : "=m" (*val));
     48        __asm__ volatile ("decl %0\n" : "+m" (*val));
    4949#endif /* CONFIG_SMP */
    5050}
     51
     52static inline atomic_t atomic_inc_pre(atomic_t *val)
     53{
     54        atomic_t r;
     55        __asm__ volatile (
     56                "movl $1,%0;"
     57                "lock xaddl %0,%1;"
     58                : "=r"(r), "+m" (*val)
     59        );
     60        return r;
     61}
     62
     63
     64
     65static inline atomic_t atomic_dec_pre(atomic_t *val)
     66{
     67        atomic_t r;
     68        __asm__ volatile (
     69                "movl $-1,%0;"
     70                "lock xaddl %0,%1;"
     71                : "=r"(r), "+m" (*val)
     72        );
     73        return r;
     74}
     75
     76#define atomic_inc_post(val) (atomic_inc_pre(val)+1)
     77#define atomic_dec_post(val) (atomic_dec_pre(val)-1)
     78
     79
    5180
    5281static inline int test_and_set(volatile int *val) {
     
    5685                "movl $1, %0\n"
    5786                "xchgl %0, %1\n"
    58                 : "=r" (v),"=m" (*val)
     87                : "=r" (v),"+m" (*val)
    5988        );
    6089       
Note: See TracChangeset for help on using the changeset viewer.