Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
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 /* _TOOLS_LINUX_ASM_X86_RMWcc */