linux/arch/x86/include/asm/asm.h
<<
>>
Prefs
   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/* Exception table entry */
  46#ifdef __ASSEMBLY__
  47# define _ASM_EXTABLE(from,to)                                  \
  48        .pushsection "__ex_table","a" ;                         \
  49        .balign 8 ;                                             \
  50        .long (from) - . ;                                      \
  51        .long (to) - . ;                                        \
  52        .popsection
  53
  54# define _ASM_EXTABLE_EX(from,to)                               \
  55        .pushsection "__ex_table","a" ;                         \
  56        .balign 8 ;                                             \
  57        .long (from) - . ;                                      \
  58        .long (to) - . + 0x7ffffff0 ;                           \
  59        .popsection
  60
  61# define _ASM_NOKPROBE(entry)                                   \
  62        .pushsection "_kprobe_blacklist","aw" ;                 \
  63        _ASM_ALIGN ;                                            \
  64        _ASM_PTR (entry);                                       \
  65        .popsection
  66#else
  67# define _ASM_EXTABLE(from,to)                                  \
  68        " .pushsection \"__ex_table\",\"a\"\n"                  \
  69        " .balign 8\n"                                          \
  70        " .long (" #from ") - .\n"                              \
  71        " .long (" #to ") - .\n"                                \
  72        " .popsection\n"
  73
  74# define _ASM_EXTABLE_EX(from,to)                               \
  75        " .pushsection \"__ex_table\",\"a\"\n"                  \
  76        " .balign 8\n"                                          \
  77        " .long (" #from ") - .\n"                              \
  78        " .long (" #to ") - . + 0x7ffffff0\n"                   \
  79        " .popsection\n"
  80/* For C file, we already have NOKPROBE_SYMBOL macro */
  81#endif
  82
  83#endif /* _ASM_X86_ASM_H */
  84