#define TEST_AND_SET(x, v) \ ({ \ bool x; \ asm volatile ( \ "swpb %1, %1, [%0] \n\t" \ : "=m"(x) : "m"(x), "r"(v) \ ); \ x; \ }) static inline test_and_set(bool *x, bool v) { asm volatile ( "swpb %0, %0, [%1]\n" : "+r"(v) : "r"(x) ); return v; }