~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/include/asm/asm.h

Version: ~ [ linux-5.4.2 ] ~ [ linux-5.3.15 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.88 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.158 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.206 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.206 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.78 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef _ASM_X86_ASM_H
  2 #define _ASM_X86_ASM_H
  3 
  4 #ifdef __ASSEMBLY__
  5 # define __ASM_FORM(x)  x
  6 # define __ASM_FORM_RAW(x)     x
  7 # define __ASM_FORM_COMMA(x) x,
  8 #else
  9 # define __ASM_FORM(x)  " " #x " "
 10 # define __ASM_FORM_RAW(x)     #x
 11 # define __ASM_FORM_COMMA(x) " " #x ","
 12 #endif
 13 
 14 #ifdef CONFIG_X86_32
 15 # define __ASM_SEL(a,b) __ASM_FORM(a)
 16 # define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(a)
 17 #else
 18 # define __ASM_SEL(a,b) __ASM_FORM(b)
 19 # define __ASM_SEL_RAW(a,b) __ASM_FORM_RAW(b)
 20 #endif
 21 
 22 #define __ASM_SIZE(inst, ...)   __ASM_SEL(inst##l##__VA_ARGS__, \
 23                                           inst##q##__VA_ARGS__)
 24 #define __ASM_REG(reg)         __ASM_SEL_RAW(e##reg, r##reg)
 25 
 26 #define _ASM_PTR        __ASM_SEL(.long, .quad)
 27 #define _ASM_ALIGN      __ASM_SEL(.balign 4, .balign 8)
 28 
 29 #define _ASM_MOV        __ASM_SIZE(mov)
 30 #define _ASM_INC        __ASM_SIZE(inc)
 31 #define _ASM_DEC        __ASM_SIZE(dec)
 32 #define _ASM_ADD        __ASM_SIZE(add)
 33 #define _ASM_SUB        __ASM_SIZE(sub)
 34 #define _ASM_XADD       __ASM_SIZE(xadd)
 35 
 36 #define _ASM_AX         __ASM_REG(ax)
 37 #define _ASM_BX         __ASM_REG(bx)
 38 #define _ASM_CX         __ASM_REG(cx)
 39 #define _ASM_DX         __ASM_REG(dx)
 40 #define _ASM_SP         __ASM_REG(sp)
 41 #define _ASM_BP         __ASM_REG(bp)
 42 #define _ASM_SI         __ASM_REG(si)
 43 #define _ASM_DI         __ASM_REG(di)
 44 
 45 /*
 46  * Macros to generate condition code outputs from inline assembly,
 47  * The output operand must be type "bool".
 48  */
 49 #ifdef __GCC_ASM_FLAG_OUTPUTS__
 50 # define CC_SET(c) "\n\t/* output condition code " #c "*/\n"
 51 # define CC_OUT(c) "=@cc" #c
 52 #else
 53 # define CC_SET(c) "\n\tset" #c " %[_cc_" #c "]\n"
 54 # define CC_OUT(c) [_cc_ ## c] "=qm"
 55 #endif
 56 
 57 /* Exception table entry */
 58 #ifdef __ASSEMBLY__
 59 # define _ASM_EXTABLE_HANDLE(from, to, handler)                 \
 60         .pushsection "__ex_table","a" ;                         \
 61         .balign 4 ;                                             \
 62         .long (from) - . ;                                      \
 63         .long (to) - . ;                                        \
 64         .long (handler) - . ;                                   \
 65         .popsection
 66 
 67 # define _ASM_EXTABLE(from, to)                                 \
 68         _ASM_EXTABLE_HANDLE(from, to, ex_handler_default)
 69 
 70 # define _ASM_EXTABLE_FAULT(from, to)                           \
 71         _ASM_EXTABLE_HANDLE(from, to, ex_handler_fault)
 72 
 73 # define _ASM_EXTABLE_EX(from, to)                              \
 74         _ASM_EXTABLE_HANDLE(from, to, ex_handler_ext)
 75 
 76 # define _ASM_NOKPROBE(entry)                                   \
 77         .pushsection "_kprobe_blacklist","aw" ;                 \
 78         _ASM_ALIGN ;                                            \
 79         _ASM_PTR (entry);                                       \
 80         .popsection
 81 
 82 .macro ALIGN_DESTINATION
 83         /* check for bad alignment of destination */
 84         movl %edi,%ecx
 85         andl $7,%ecx
 86         jz 102f                         /* already aligned */
 87         subl $8,%ecx
 88         negl %ecx
 89         subl %ecx,%edx
 90 100:    movb (%rsi),%al
 91 101:    movb %al,(%rdi)
 92         incq %rsi
 93         incq %rdi
 94         decl %ecx
 95         jnz 100b
 96 102:
 97         .section .fixup,"ax"
 98 103:    addl %ecx,%edx                  /* ecx is zerorest also */
 99         jmp copy_user_handle_tail
100         .previous
101 
102         _ASM_EXTABLE(100b,103b)
103         _ASM_EXTABLE(101b,103b)
104         .endm
105 
106 #else
107 # define _EXPAND_EXTABLE_HANDLE(x) #x
108 # define _ASM_EXTABLE_HANDLE(from, to, handler)                 \
109         " .pushsection \"__ex_table\",\"a\"\n"                  \
110         " .balign 4\n"                                          \
111         " .long (" #from ") - .\n"                              \
112         " .long (" #to ") - .\n"                                \
113         " .long (" _EXPAND_EXTABLE_HANDLE(handler) ") - .\n"    \
114         " .popsection\n"
115 
116 # define _ASM_EXTABLE(from, to)                                 \
117         _ASM_EXTABLE_HANDLE(from, to, ex_handler_default)
118 
119 # define _ASM_EXTABLE_FAULT(from, to)                           \
120         _ASM_EXTABLE_HANDLE(from, to, ex_handler_fault)
121 
122 # define _ASM_EXTABLE_EX(from, to)                              \
123         _ASM_EXTABLE_HANDLE(from, to, ex_handler_ext)
124 
125 /* For C file, we already have NOKPROBE_SYMBOL macro */
126 #endif
127 
128 #endif /* _ASM_X86_ASM_H */
129 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp