Rev 2071 | Rev 2479 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2071 | Rev 2082 | ||
---|---|---|---|
Line 34... | Line 34... | ||
34 | 34 | ||
35 | #ifndef LIBC_ia32_ATOMIC_H_ |
35 | #ifndef LIBC_ia32_ATOMIC_H_ |
36 | #define LIBC_ia32_ATOMIC_H_ |
36 | #define LIBC_ia32_ATOMIC_H_ |
37 | 37 | ||
38 | static inline void atomic_inc(atomic_t *val) { |
38 | static inline void atomic_inc(atomic_t *val) { |
39 | __asm__ volatile ("lock incl %0\n" : "=m" (val->count)); |
39 | asm volatile ("lock incl %0\n" : "=m" (val->count)); |
40 | } |
40 | } |
41 | 41 | ||
42 | static inline void atomic_dec(atomic_t *val) { |
42 | static inline void atomic_dec(atomic_t *val) { |
43 | __asm__ volatile ("lock decl %0\n" : "=m" (val->count)); |
43 | asm volatile ("lock decl %0\n" : "=m" (val->count)); |
44 | } |
44 | } |
45 | 45 | ||
46 | static inline long atomic_postinc(atomic_t *val) |
46 | static inline long atomic_postinc(atomic_t *val) |
47 | { |
47 | { |
48 | long r; |
48 | long r; |
49 | 49 | ||
50 | __asm__ volatile ( |
50 | asm volatile ( |
51 | "movl $1, %0\n" |
51 | "movl $1, %0\n" |
52 | "lock xaddl %0, %1\n" |
52 | "lock xaddl %0, %1\n" |
53 | : "=r" (r), "=m" (val->count) |
53 | : "=r" (r), "=m" (val->count) |
54 | ); |
54 | ); |
55 | 55 | ||
Line 58... | Line 58... | ||
58 | 58 | ||
59 | static inline long atomic_postdec(atomic_t *val) |
59 | static inline long atomic_postdec(atomic_t *val) |
60 | { |
60 | { |
61 | long r; |
61 | long r; |
62 | 62 | ||
63 | __asm__ volatile ( |
63 | asm volatile ( |
64 | "movl $-1, %0\n" |
64 | "movl $-1, %0\n" |
65 | "lock xaddl %0, %1\n" |
65 | "lock xaddl %0, %1\n" |
66 | : "=r" (r), "=m" (val->count) |
66 | : "=r" (r), "=m" (val->count) |
67 | ); |
67 | ); |
68 | 68 |