Blame view

kernel/linux-rt-4.4.41/arch/x86/include/asm/rmwcc.h 1.01 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  #ifndef _ASM_X86_RMWcc
  #define _ASM_X86_RMWcc
  
  #ifdef CC_HAVE_ASM_GOTO
  
  #define __GEN_RMWcc(fullop, var, cc, ...)				\
  do {									\
  	asm_volatile_goto (fullop "; j" cc " %l[cc_label]"		\
  			: : "m" (var), ## __VA_ARGS__ 			\
  			: "memory" : cc_label);				\
  	return 0;							\
  cc_label:								\
  	return 1;							\
  } while (0)
  
  #define GEN_UNARY_RMWcc(op, var, arg0, cc) 				\
  	__GEN_RMWcc(op " " arg0, var, cc)
  
  #define GEN_BINARY_RMWcc(op, var, vcon, val, arg0, cc)			\
  	__GEN_RMWcc(op " %1, " arg0, var, cc, vcon (val))
  
  #else /* !CC_HAVE_ASM_GOTO */
  
  #define __GEN_RMWcc(fullop, var, cc, ...)				\
  do {									\
  	char c;								\
  	asm volatile (fullop "; set" cc " %1"				\
  			: "+m" (var), "=qm" (c)				\
  			: __VA_ARGS__ : "memory");			\
  	return c != 0;							\
  } while (0)
  
  #define GEN_UNARY_RMWcc(op, var, arg0, cc)				\
  	__GEN_RMWcc(op " " arg0, var, cc)
  
  #define GEN_BINARY_RMWcc(op, var, vcon, val, arg0, cc)			\
  	__GEN_RMWcc(op " %2, " arg0, var, cc, vcon (val))
  
  #endif /* CC_HAVE_ASM_GOTO */
  
  #endif /* _ASM_X86_RMWcc */