On Feb 13 2019, Peng Fan <peng....@nxp.com> wrote: > static inline int test_and_set_bit(int nr, volatile unsigned long *addr) > { > u32 ret; > u64 test, tmp; > > BITOPT_ALIGN(nr, addr); > > /* AARCH64_TODO: using Inner Shareable DMB at the moment, > * revisit when we will deal with shareability domains */ > > do { > asm volatile ( > "ldxr %3, %2\n\t" > "ands %1, %3, %4\n\t" > "b.ne 1f\n\t" > "orr %3, %3, %4\n\t" > "1:\n\t" > "stxr %w0, %3, %2\n\t" > "dmb ish\n\t" > : "=r" (ret), "=&r" (test), > "+Q" (*(volatile unsigned long *)addr), > "=r" (tmp) > : "r" (1ul << nr));
%3 is modified early, but not marked earlyclobber. Andreas. -- Andreas Schwab, SUSE Labs, sch...@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different."