Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libc/arch/ia32/include/atomic.h

    r228666c re15e0e8  
    4040#include <atomicdflt.h>
    4141
    42 static inline void atomic_inc(atomic_t *val)
    43 {
    44         asm volatile (
    45                 "lock incl %[count]\n"
    46                 : [count] "+m" (val->count)
    47         );
     42static inline void atomic_inc(atomic_t *val) {
     43        asm volatile ("lock incl %0\n" : "+m" (val->count));
    4844}
    4945
    50 static inline void atomic_dec(atomic_t *val)
    51 {
    52         asm volatile (
    53                 "lock decl %[count]\n"
    54                 : [count] "+m" (val->count)
    55         );
     46static inline void atomic_dec(atomic_t *val) {
     47        asm volatile ("lock decl %0\n" : "+m" (val->count));
    5648}
    5749
    58 static inline atomic_count_t atomic_postinc(atomic_t *val)
     50static inline long atomic_postinc(atomic_t *val)
    5951{
    60         atomic_count_t r = 1;
     52        long r;
     53
     54        asm volatile (
     55                "movl $1, %0\n"
     56                "lock xaddl %0, %1\n"
     57                : "=r" (r), "+m" (val->count)
     58        );
     59
     60        return r;
     61}
     62
     63static inline long atomic_postdec(atomic_t *val)
     64{
     65        long r;
    6166       
    6267        asm volatile (
    63                 "lock xaddl %[r], %[count]\n"
    64                 : [count] "+m" (val->count),
    65                   [r] "+r" (r)
     68                "movl $-1, %0\n"
     69                "lock xaddl %0, %1\n"
     70                : "=r" (r), "+m" (val->count)
    6671        );
    6772       
     
    6974}
    7075
    71 static inline atomic_count_t atomic_postdec(atomic_t *val)
    72 {
    73         atomic_count_t r = -1;
    74        
    75         asm volatile (
    76                 "lock xaddl %[r], %[count]\n"
    77                 : [count] "+m" (val->count),
    78                   [r] "+r" (r)
    79         );
    80        
    81         return r;
    82 }
    83 
    84 #define atomic_preinc(val)  (atomic_postinc(val) + 1)
    85 #define atomic_predec(val)  (atomic_postdec(val) - 1)
     76#define atomic_preinc(val) (atomic_postinc(val) + 1)
     77#define atomic_predec(val) (atomic_postdec(val) - 1)
    8678
    8779#endif
Note: See TracChangeset for help on using the changeset viewer.