0001
0002 #ifndef _TOOLS_LINUX_ASM_X86_RMWcc
0003 #define _TOOLS_LINUX_ASM_X86_RMWcc
0004
0005 #define __GEN_RMWcc(fullop, var, cc, ...) \
0006 do { \
0007 asm_volatile_goto (fullop "; j" cc " %l[cc_label]" \
0008 : : "m" (var), ## __VA_ARGS__ \
0009 : "memory" : cc_label); \
0010 return 0; \
0011 cc_label: \
0012 return 1; \
0013 } while (0)
0014
0015 #define GEN_UNARY_RMWcc(op, var, arg0, cc) \
0016 __GEN_RMWcc(op " " arg0, var, cc)
0017
0018 #define GEN_BINARY_RMWcc(op, var, vcon, val, arg0, cc) \
0019 __GEN_RMWcc(op " %1, " arg0, var, cc, vcon (val))
0020
0021 #endif