xref: /openbmc/linux/tools/arch/x86/include/asm/rmwcc.h (revision c595db6d7c8bcf87ef42204391fa890e5950e566)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2da6d8567SArnaldo Carvalho de Melo #ifndef _TOOLS_LINUX_ASM_X86_RMWcc
3da6d8567SArnaldo Carvalho de Melo #define _TOOLS_LINUX_ASM_X86_RMWcc
4da6d8567SArnaldo Carvalho de Melo 
5da6d8567SArnaldo Carvalho de Melo #define __GEN_RMWcc(fullop, var, cc, ...)				\
6da6d8567SArnaldo Carvalho de Melo do {									\
7*aaff74d8SLinus Torvalds 	asm goto (fullop "; j" cc " %l[cc_label]"		\
8da6d8567SArnaldo Carvalho de Melo 			: : "m" (var), ## __VA_ARGS__ 			\
9da6d8567SArnaldo Carvalho de Melo 			: "memory" : cc_label);				\
10da6d8567SArnaldo Carvalho de Melo 	return 0;							\
11da6d8567SArnaldo Carvalho de Melo cc_label:								\
12da6d8567SArnaldo Carvalho de Melo 	return 1;							\
13da6d8567SArnaldo Carvalho de Melo } while (0)
14da6d8567SArnaldo Carvalho de Melo 
15da6d8567SArnaldo Carvalho de Melo #define GEN_UNARY_RMWcc(op, var, arg0, cc) 				\
16da6d8567SArnaldo Carvalho de Melo 	__GEN_RMWcc(op " " arg0, var, cc)
17da6d8567SArnaldo Carvalho de Melo 
18da6d8567SArnaldo Carvalho de Melo #define GEN_BINARY_RMWcc(op, var, vcon, val, arg0, cc)			\
19da6d8567SArnaldo Carvalho de Melo 	__GEN_RMWcc(op " %1, " arg0, var, cc, vcon (val))
20da6d8567SArnaldo Carvalho de Melo 
21da6d8567SArnaldo Carvalho de Melo #endif /* _TOOLS_LINUX_ASM_X86_RMWcc */
22