__asm__ __volatile__()

in include/asm/uaccess.h [124:175]


	__asm__ __volatile__ (						\
		"1:	"inst"	%1,[%2]\n"				\
		"2:\n"							\
		"	.section .fixup,\"ax\"\n"			\
		"	.align	2\n"					\
		"3:	move %0, %3\n"					\
		"	move %1, #0\n"					\
		"	b	2b\n"					\
		"	.previous\n"					\
		"	.section __ex_table,\"a\"\n"			\
		"	.align	3\n"					\
		"	.long	1b, 3b\n"				\
		"	.previous"					\
		: "+r" (err), "=&r" (x)					\
		: "r" (addr), "i" (-EFAULT)				\
		: "cc")

#ifdef __NDS32_EB__
#define __gu_reg_oper0 "%H1"
#define __gu_reg_oper1 "%L1"
#else
#define __gu_reg_oper0 "%L1"
#define __gu_reg_oper1 "%H1"
#endif

#define __get_user_asm_dword(x, addr, err) 				\
	__asm__ __volatile__ (						\
		"\n1:\tlwi " __gu_reg_oper0 ",[%2]\n"			\
		"\n2:\tlwi " __gu_reg_oper1 ",[%2+4]\n"			\
		"3:\n"							\
		"	.section .fixup,\"ax\"\n"			\
		"	.align	2\n"					\
		"4:	move	%0, %3\n"				\
		"	b	3b\n"					\
		"	.previous\n"					\
		"	.section __ex_table,\"a\"\n"			\
		"	.align	3\n"					\
		"	.long	1b, 4b\n"				\
		"	.long	2b, 4b\n"				\
		"	.previous"					\
		: "+r"(err), "=&r"(x)					\
		: "r"(addr), "i"(-EFAULT)				\
		: "cc")

#define put_user	__put_user					\

#define __put_user(x, ptr)						\
({									\
	long __pu_err = 0;						\
	__put_user_err((x), (ptr), __pu_err);				\
	__pu_err;							\
})