Rev 2131 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2131 | Rev 2307 | ||
|---|---|---|---|
| Line 49... | Line 49... | ||
| 49 | static inline long atomic_add(atomic_t *val, int i) |
49 | static inline long atomic_add(atomic_t *val, int i) |
| 50 | { |
50 | { |
| 51 | uint64_t a, b; |
51 | uint64_t a, b; |
| 52 | 52 | ||
| 53 | do { |
53 | do { |
| - | 54 | volatile uintptr_t x = (uint64_t) &val->count; |
|
| - | 55 | ||
| 54 | a = val->count; |
56 | a = *((uint64_t *) x); |
| 55 | b = a + i; |
57 | b = a + i; |
| 56 | asm volatile ("casx %0, %2, %1\n" : "+m" (*val), "+r" (b) : "r" (a)); |
58 | asm volatile ("casx %0, %2, %1\n" : "+m" (*((uint64_t *)x)), "+r" (b) : "r" (a)); |
| 57 | } while (a != b); |
59 | } while (a != b); |
| 58 | 60 | ||
| 59 | return a; |
61 | return a; |
| 60 | } |
62 | } |
| 61 | 63 | ||