Changes in uspace/lib/libc/arch/ia32/include/atomic.h [228666c:e15e0e8] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/arch/ia32/include/atomic.h
r228666c re15e0e8 40 40 #include <atomicdflt.h> 41 41 42 static inline void atomic_inc(atomic_t *val) 43 { 44 asm volatile ( 45 "lock incl %[count]\n" 46 : [count] "+m" (val->count) 47 ); 42 static inline void atomic_inc(atomic_t *val) { 43 asm volatile ("lock incl %0\n" : "+m" (val->count)); 48 44 } 49 45 50 static inline void atomic_dec(atomic_t *val) 51 { 52 asm volatile ( 53 "lock decl %[count]\n" 54 : [count] "+m" (val->count) 55 ); 46 static inline void atomic_dec(atomic_t *val) { 47 asm volatile ("lock decl %0\n" : "+m" (val->count)); 56 48 } 57 49 58 static inline atomic_count_t atomic_postinc(atomic_t *val)50 static inline long atomic_postinc(atomic_t *val) 59 51 { 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 63 static inline long atomic_postdec(atomic_t *val) 64 { 65 long r; 61 66 62 67 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) 66 71 ); 67 72 … … 69 74 } 70 75 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) 86 78 87 79 #endif
Note:
See TracChangeset
for help on using the changeset viewer.