Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

## Elixir Cross Referencer

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53``` ```#define a_cas a_cas static inline int a_cas(volatile int *p, int t, int s) { register int old, tmp; __asm__ __volatile__ ( " addi %0, r0, 0\n" "1: lwx %0, %2, r0\n" " rsubk %1, %0, %3\n" " bnei %1, 1f\n" " swx %4, %2, r0\n" " addic %1, r0, 0\n" " bnei %1, 1b\n" "1: " : "=&r"(old), "=&r"(tmp) : "r"(p), "r"(t), "r"(s) : "cc", "memory" ); return old; } #define a_swap a_swap static inline int a_swap(volatile int *x, int v) { register int old, tmp; __asm__ __volatile__ ( " addi %0, r0, 0\n" "1: lwx %0, %2, r0\n" " swx %3, %2, r0\n" " addic %1, r0, 0\n" " bnei %1, 1b\n" "1: " : "=&r"(old), "=&r"(tmp) : "r"(x), "r"(v) : "cc", "memory" ); return old; } #define a_fetch_add a_fetch_add static inline int a_fetch_add(volatile int *x, int v) { register int new, tmp; __asm__ __volatile__ ( " addi %0, r0, 0\n" "1: lwx %0, %2, r0\n" " addk %0, %0, %3\n" " swx %0, %2, r0\n" " addic %1, r0, 0\n" " bnei %1, 1b\n" "1: " : "=&r"(new), "=&r"(tmp) : "r"(x), "r"(v) : "cc", "memory" ); return new-v; } ```