Ignore:
File:
1 edited

Legend:

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

    r228666c re15e0e8  
    4242#include <atomicdflt.h>
    4343
    44 static inline void atomic_inc(atomic_t *val)
    45 {
    46         asm volatile (
    47                 "lock incq %[count]\n"
    48                 : [count] "+m" (val->count)
    49         );
     44static inline void atomic_inc(atomic_t *val) {
     45        asm volatile ("lock incq %0\n" : "+m" (val->count));
    5046}
    5147
    52 static inline void atomic_dec(atomic_t *val)
    53 {
    54         asm volatile (
    55                 "lock decq %[count]\n"
    56                 : [count] "+m" (val->count)
    57         );
     48static inline void atomic_dec(atomic_t *val) {
     49        asm volatile ("lock decq %0\n" : "+m" (val->count));
    5850}
    5951
    60 static inline atomic_count_t atomic_postinc(atomic_t *val)
     52static inline long atomic_postinc(atomic_t *val)
    6153{
    62         atomic_count_t r = 1;
     54        long r;
     55
     56        asm volatile (
     57                "movq $1, %0\n"
     58                "lock xaddq %0, %1\n"
     59                : "=r" (r), "+m" (val->count)
     60        );
     61
     62        return r;
     63}
     64
     65static inline long atomic_postdec(atomic_t *val)
     66{
     67        long r;
    6368       
    6469        asm volatile (
    65                 "lock xaddq %[r], %[count]\n"
    66                 : [count] "+m" (val->count),
    67                   [r] "+r" (r)
     70                "movq $-1, %0\n"
     71                "lock xaddq %0, %1\n"
     72                : "=r" (r), "+m" (val->count)
    6873        );
    6974       
     
    7176}
    7277
    73 static inline atomic_count_t atomic_postdec(atomic_t *val)
    74 {
    75         atomic_count_t r = -1;
    76        
    77         asm volatile (
    78                 "lock xaddq %[r], %[count]\n"
    79                 : [count] "+m" (val->count),
    80                   [r] "+r" (r)
    81         );
    82        
    83         return r;
    84 }
    85 
    86 #define atomic_preinc(val)  (atomic_postinc(val) + 1)
    87 #define atomic_predec(val)  (atomic_postdec(val) - 1)
     78#define atomic_preinc(val) (atomic_postinc(val) + 1)
     79#define atomic_predec(val) (atomic_postdec(val) - 1)
    8880
    8981#endif
Note: See TracChangeset for help on using the changeset viewer.