The memory operand is an in/out one, and the auxiliary register gets written to early.
Take the opportunity and also drop the redundant cast (the inline functions' parameters are already of the casted-to type). Signed-off-by: Jan Beulich <jbeul...@suse.com> --- a/xen/include/asm-arm/atomic.h +++ b/xen/include/asm-arm/atomic.h @@ -30,7 +30,7 @@ static inline void name(volatile type *a asm volatile("ldr" size " %"width"1,%0\n" \ "add %"width"1,%"width"1,%"width"2\n" \ "str" size " %"width"1,%0" \ - : "=m" (*(volatile type *)addr), "=r" (t) \ + : "+m" (*addr), "=&r" (t) \ : reg (val)); \ } _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel