asmi386.h
上传用户:shenzhenrh
上传日期:2013-05-12
资源大小:2904k
文件大小:4k
源码类别:

信息检索与抽取

开发平台:

Unix_Linux

  1. #ifdef _MSC_VER
  2. #define C(entrypoint) entrypoint
  3. #define L(label) L##label
  4. #else
  5. #ifdef ASM_UNDERSCORE
  6. #define C(entrypoint) _##entrypoint
  7. #define L(label) L##label
  8. #else
  9. #define C(entrypoint) entrypoint
  10. #define L(label) .L##label
  11. #endif
  12. #endif
  13. #ifdef _MSC_VER
  14. #define INTEL_SYNTAX
  15. #else
  16. #ifdef ASM_UNDERSCORE
  17. #define BSD_SYNTAX
  18. #else
  19. #define ELF_SYNTAX
  20. #endif
  21. #endif
  22. #if defined (BSD_SYNTAX) || defined (ELF_SYNTAX)
  23. #define R(r) %r
  24. #define NUM(n) $##n
  25. #define ADDR(a) $##a
  26. #define X1
  27. #define X2
  28. #define X4
  29. #define X8
  30. #define MEM(base)(R(base))
  31. #define MEM_DISP(base,displacement)displacement(R(base))
  32. #define MEM_INDEX(base,index)(R(base),R(index))
  33. #define MEM_SHINDEX(base,index,size)(R(base),R(index),size)
  34. #define MEM_DISP_SHINDEX0(displacement,index,size)displacement(,R(index),size)
  35. #define MEM_DISP_SHINDEX(base,displacement,index,size)displacement(R(base),R(index),size)
  36. #define INDIR(value)*value
  37. #define INSNCONC(mnemonic,size_suffix)mnemonic##size_suffix
  38. #define INSN1(mnemonic,size_suffix,dst)INSNCONC(mnemonic,size_suffix) dst
  39. #define INSN2(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) src,dst
  40. #define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix##l) src,dst
  41. #if defined(BSD_SYNTAX) || defined(COHERENT)
  42. #define INSN2SHCL(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) R(cl),src,dst
  43. #define REPZ repe ;
  44. #else
  45. #define INSN2SHCL(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,size_suffix) src,dst
  46. #define REPZ repz ;
  47. #endif
  48. #define REP rep ;
  49. #if defined(BSD_SYNTAX) && !(defined(__CYGWIN32__) || defined(__MINGW32__))
  50. #define ALIGN(log) .align log,0x90
  51. #endif
  52. #if defined(ELF_SYNTAX) || defined(__CYGWIN32__) || defined(__MINGW32__)
  53. #define ALIGN(log) .align 1<<log
  54. #endif
  55. #endif
  56. #ifdef INTEL_SYNTAX
  57. #define R(r) r
  58. #define NUM(n) n
  59. #define ADDR(a) OFFSET a
  60. #define X1 BYTE PTR
  61. #define X2 WORD PTR
  62. #define X4 DWORD PTR
  63. #define X8 QWORD PTR
  64. #define MEM(base) [base]
  65. #define MEM_DISP(base,displacement) [base+(displacement)]
  66. #define MEM_INDEX(base,index) [base+index]
  67. #define MEM_SHINDEX(base,index,size) [base+index*size]
  68. #define MEM_DISP_SHINDEX0(displacement,index,size) [(displacement)+index*size]
  69. #define MEM_DISP_SHINDEX(base,displacement,index,size) [base+(displacement)+index*size]
  70. #define INDIR(value)value
  71. #define INSNCONC(mnemonic,suffix)mnemonic##suffix
  72. #define INSN1(mnemonic,size_suffix,dst)mnemonic dst
  73. #define INSN2(mnemonic,size_suffix,src,dst)mnemonic dst,src
  74. #define INSN2MOVX(mnemonic,size_suffix,src,dst)INSNCONC(mnemonic,x) dst,src
  75. #define INSN2SHCL(mnemonic,size_suffix,src,dst)mnemonic dst,src,R(cl)
  76. #define REPZ repz
  77. #define REP rep
  78. #define movsl  movs R(eax)
  79. #define stosl  stos R(eax)
  80. #define scasl  scas R(eax)
  81. #define cmpsl  cmpsd
  82. #ifdef _MSC_VER
  83. #define ALIGN(log)
  84. #else
  85. #define ALIGN(log) .align log
  86. #endif
  87. #endif
  88. #ifdef _MSC_VER
  89. #define TEXT()
  90. #else
  91. #define TEXT() .text
  92. #endif
  93. #ifdef _MSC_VER
  94. #define GLOBL(name)
  95. #else
  96. #define GLOBL(name) .globl name
  97. #endif
  98. #ifdef _MSC_VER
  99. #define DECLARE_FUNCTION(name)
  100. #elif defined(__svr4__) || defined(__ELF__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__ROSE__) || defined(_SEQUENT_) || defined(DGUX) || defined(_SCO_COFF) || defined(_SCO_ELF)
  101. #define DECLARE_FUNCTION(name) .type C(name),@function
  102. #else
  103. #define DECLARE_FUNCTION(name)
  104. #endif
  105. #ifdef _MSC_VER
  106. #define FUNBEGIN(name) __declspec(naked) void name () { __asm {
  107. #define FUNEND()                                      }       }
  108. #else
  109. #define FUNBEGIN(name) C(name##:)
  110. #define FUNEND()
  111. #endif
  112. #define _
  113. TEXT()