Commit 5eff6ca2 authored by Max Filippov's avatar Max Filippov
Browse files

xtensa: use "m" constraint instead of "r" in futex.h assembly



Use "m" constraint instead of "r" for the address, as "m" allows
compiler to access adjacent locations using base + offset, while "r"
requires updating the base register every time.

Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent cf3b3baa
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -43,10 +43,10 @@
#elif XCHAL_HAVE_S32C1I
#define __futex_atomic_op(insn, ret, old, uaddr, arg)	\
	__asm__ __volatile(				\
	"1:	l32i	%[oldval], %[addr], 0\n"	\
	"1:	l32i	%[oldval], %[mem]\n"		\
		insn "\n"				\
	"	wsr	%[oldval], scompare1\n"		\
	"2:	s32c1i	%[newval], %[addr], 0\n"	\
	"2:	s32c1i	%[newval], %[mem]\n"		\
	"	bne	%[newval], %[oldval], 1b\n"	\
	"	movi	%[newval], 0\n"			\
	"3:\n"						\
@@ -60,9 +60,9 @@
	"	.section __ex_table,\"a\"\n"		\
	"	.long 1b, 5b, 2b, 5b\n"			\
	"	.previous\n"				\
	: [oldval] "=&r" (old), [newval] "=&r" (ret)	\
	: [addr] "r" (uaddr), [oparg] "r" (arg),	\
	  [fault] "I" (-EFAULT)				\
	: [oldval] "=&r" (old), [newval] "=&r" (ret),	\
	  [mem] "+m" (*(uaddr))				\
	: [oparg] "r" (arg), [fault] "I" (-EFAULT)	\
	: "memory")
#endif