Commit c0437642 authored by Max Filippov's avatar Max Filippov
Browse files

xtensa: clean up assembly arguments in uaccess macros



Numeric assembly arguments are hard to understand and assembly code that
uses them is hard to modify. Use named arguments in __check_align_*,
__get_user_asm and __put_user_asm. Modify macro parameter names so that
they don't affect argument names. Use '+' constraint for the [err]
argument instead of having it as both input and output.

Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent 6595d144
Loading
Loading
Loading
Loading
+21 −21
Original line number Diff line number Diff line
@@ -132,14 +132,14 @@ do { \
#define __check_align_1  ""

#define __check_align_2				\
	"   _bbci.l %3,  0, 1f		\n"	\
	"   movi    %0, %4		\n"	\
	"   _bbci.l %[addr], 0, 1f	\n"	\
	"   movi    %[err], %[efault]	\n"	\
	"   _j      2f			\n"

#define __check_align_4				\
	"   _bbsi.l %3,  0, 0f		\n"	\
	"   _bbci.l %3,  1, 1f		\n"	\
	"0: movi    %0, %4		\n"	\
	"   _bbsi.l %[addr], 0, 0f	\n"	\
	"   _bbci.l %[addr], 1, 1f	\n"	\
	"0: movi    %[err], %[efault]	\n"	\
	"   _j      2f			\n"


@@ -151,24 +151,24 @@ do { \
 * WARNING: If you modify this macro at all, verify that the
 * __check_align_* macros still work.
 */
#define __put_user_asm(x, addr, err, align, insn, cb)	\
#define __put_user_asm(x_, addr_, err_, align, insn, cb)\
__asm__ __volatile__(					\
	__check_align_##align				\
	"1: "insn"  %2, %3, 0		\n"		\
	"1: "insn"  %[x], %[addr], 0	\n"		\
	"2:				\n"		\
	"   .section  .fixup,\"ax\"	\n"		\
	"   .align 4			\n"		\
	"   .literal_position		\n"		\
	"5:				\n"		\
	"   movi   %1, 2b		\n"		\
	"   movi   %0, %4		\n"		\
	"   jx     %1			\n"		\
	"   movi   %[tmp], 2b		\n"		\
	"   movi   %[err], %[efault]	\n"		\
	"   jx     %[tmp]		\n"		\
	"   .previous			\n"		\
	"   .section  __ex_table,\"a\"	\n"		\
	"   .long	1b, 5b		\n"		\
	"   .previous"					\
	:"=r" (err), "=r" (cb)				\
	:"r" ((int)(x)), "r" (addr), "i" (-EFAULT), "0" (err))
	:[err] "+r"(err_), [tmp] "=r"(cb)		\
	:[x] "r"(x_), [addr] "r"(addr_), [efault] "i"(-EFAULT))

#define __get_user_nocheck(x, ptr, size)			\
({								\
@@ -217,25 +217,25 @@ do { \
 * WARNING: If you modify this macro at all, verify that the
 * __check_align_* macros still work.
 */
#define __get_user_asm(x, addr, err, align, insn, cb) \
#define __get_user_asm(x_, addr_, err_, align, insn, cb) \
__asm__ __volatile__(				\
	__check_align_##align			\
	"1: "insn"  %2, %3, 0		\n"	\
	"1: "insn"  %[x], %[addr], 0	\n"	\
	"2:				\n"	\
	"   .section  .fixup,\"ax\"	\n"	\
	"   .align 4			\n"	\
	"   .literal_position		\n"	\
	"5:				\n"	\
	"   movi   %1, 2b		\n"	\
	"   movi   %2, 0		\n"	\
	"   movi   %0, %4		\n"	\
	"   jx     %1			\n"	\
	"   movi   %[tmp], 2b		\n"	\
	"   movi   %[x], 0		\n"	\
	"   movi   %[err], %[efault]	\n"	\
	"   jx     %[tmp]		\n"	\
	"   .previous			\n"	\
	"   .section  __ex_table,\"a\"	\n"	\
	"   .long	1b, 5b		\n"	\
	"   .previous"				\
	:"=r" (err), "=r" (cb), "=r" (x)	\
	:"r" (addr), "i" (-EFAULT), "0" (err))
	:[err] "+r"(err_), [tmp] "=r"(cb), [x] "=r"(x_)\
	:[addr] "r"(addr_), [efault] "i"(-EFAULT))


/*