about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-07-19 12:19:20 -0400
committerRich Felker <dalias@aerifal.cx>2014-07-28 00:28:00 -0400
commitb1d89d48aa8b52d0e5b918750b047e139a637178 (patch)
treecd304dce45021a30566d0647d437e5b987449724
parent1431b29888eb22057fe7e441082015ea3c2f1e7a (diff)
downloadmusl-b1d89d48aa8b52d0e5b918750b047e139a637178.tar.gz
musl-b1d89d48aa8b52d0e5b918750b047e139a637178.tar.xz
musl-b1d89d48aa8b52d0e5b918750b047e139a637178.zip
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)
-rw-r--r--arch/powerpc/atomic.h2
1 files changed, 1 insertions, 1 deletions
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;
 }