apparently clang does not accept matching-register input and output constraints that differ in size (32-bit vs 64-bit). based on patch by Jaydeep Patil.
@@ -31,7 +31,7 @@ static inline void *a_ll_p(volatile long *p)
#define a_sc_p a_sc_p
static inline int a_sc_p(volatile long *p, void *v)
{
- int r;
+ long r;
__asm__ __volatile__ (
"scd %0, %1"
: "=r"(r), "=m"(*p) : "0"(v) : "memory");