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