fix arm atomic asm register constraint
authorRich Felker <dalias@aerifal.cx>
Mon, 7 Apr 2014 08:28:12 +0000 (04:28 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 7 Apr 2014 08:28:12 +0000 (04:28 -0400)
the "m" constraint could give a memory reference with an offset that's
not compatible with ldrex/strex, so the arm-specific "Q" constraint is
needed instead.

arch/arm/atomic.h

index fe88225b9eb28bd22f9ade60dd91553cfa633d24..50ad947832f8b45ef0cb1a257f39773f7290f21f 100644 (file)
@@ -37,7 +37,7 @@ static inline int __k_cas(int t, int s, volatile int *p)
                "       beq 1b\n"
                "       mcr p15,0,r0,c7,c10,5\n"
                : "=&r"(ret)
-               : "r"(t), "r"(s), "m"(*p)
+               : "r"(t), "r"(s), "Q"(*p)
                : "memory", "cc" );
        return ret;
 }