From b1d89d48aa8b52d0e5b918750b047e139a637178 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sat, 19 Jul 2014 12:19:20 -0400 Subject: fix broken constraints for powerpc atomic cas asm the register constraint for the address to be accessed did not convey that the asm can access the pointed-to object. as far as the compiler could tell, the result of the asm was just a pure function of the address and the values passed in, and thus the asm could be hoisted out of loops or omitted entirely if the result was not used. (cherry picked from commit 7fdae458bd421046a300a69dcb32953ac9450136) --- arch/powerpc/atomic.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/powerpc/atomic.h b/arch/powerpc/atomic.h index d52ee0c6..05951a2d 100644 --- a/arch/powerpc/atomic.h +++ b/arch/powerpc/atomic.h @@ -31,7 +31,7 @@ static inline int a_cas(volatile int *p, int t, int s) " stwcx. %3, 0, %1\n" " bne- 1b\n" "1: \n" - : "=&r"(t) : "r"(p), "r"(t), "r"(s) : "cc", "memory" ); + : "=&r"(t), "+m"(*p) : "r"(t), "r"(s) : "cc", "memory" ); return t; } -- cgit v1.2.1