RegList.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. // Internal Listing Machine
  6. // Name Name Encode Type BitVec
  7. //------------------------------------------------------------------------
  8. #ifndef REGDAT
  9. #define REGDAT(Name, Listing, Encode, Type, BitVec)
  10. #endif
  11. // Illegal registers - must be first and have a value of 0
  12. // Internal Name
  13. // / Listing Name
  14. // / / Machine Encode
  15. // / / /
  16. // / / / Type
  17. // / / / / BitVec
  18. // / / / / /
  19. #ifdef _WIN32
  20. REGDAT(NOREG, noreg, 0xf, TyIllegal, RA_DONTALLOCATE)
  21. REGDAT(RAX, rax, 0, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  22. REGDAT(RCX, rcx, 1, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  23. REGDAT(RDX, rdx, 2, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  24. REGDAT(RBX, rbx, 3, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  25. REGDAT(RSP, rsp, 4, TyInt64, RA_DONTALLOCATE)
  26. REGDAT(RBP, rbp, 5, TyInt64, RA_DONTALLOCATE)
  27. REGDAT(RSI, rsi, 6, TyInt64, RA_CALLEESAVE)
  28. REGDAT(RDI, rdi, 7, TyInt64, RA_CALLEESAVE)
  29. REGDAT(R8, r8, 0, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  30. REGDAT(R9, r9, 1, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  31. REGDAT(R10, r10, 2, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  32. REGDAT(R11, r11, 3, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  33. REGDAT(R12, r12, 4, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  34. REGDAT(R13, r13, 5, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  35. REGDAT(R14, r14, 6, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  36. REGDAT(R15, r15, 7, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  37. REGDAT(XMM0, xmm0, 0, TyFloat64, 0)
  38. REGDAT(XMM1, xmm1, 1, TyFloat64, 0)
  39. REGDAT(XMM2, xmm2, 2, TyFloat64, 0)
  40. REGDAT(XMM3, xmm3, 3, TyFloat64, 0)
  41. REGDAT(XMM4, xmm4, 4, TyFloat64, 0)
  42. REGDAT(XMM5, xmm5, 5, TyFloat64, 0)
  43. REGDAT(XMM6, xmm6, 6, TyFloat64, RA_CALLEESAVE)
  44. REGDAT(XMM7, xmm7, 7, TyFloat64, RA_CALLEESAVE)
  45. REGDAT(XMM8, xmm8, 0, TyFloat64, RA_CALLEESAVE)
  46. REGDAT(XMM9, xmm9, 1, TyFloat64, RA_CALLEESAVE)
  47. REGDAT(XMM10, xmm10, 2, TyFloat64, RA_CALLEESAVE)
  48. REGDAT(XMM11, xmm11, 3, TyFloat64, RA_CALLEESAVE)
  49. REGDAT(XMM12, xmm12, 4, TyFloat64, RA_CALLEESAVE)
  50. REGDAT(XMM13, xmm13, 5, TyFloat64, RA_CALLEESAVE)
  51. REGDAT(XMM14, xmm14, 6, TyFloat64, RA_CALLEESAVE)
  52. REGDAT(XMM15, xmm15, 7, TyFloat64, RA_CALLEESAVE)
  53. #else // System V x64
  54. REGDAT(NOREG, noreg, 0xf, TyIllegal, RA_DONTALLOCATE)
  55. REGDAT(RAX, rax, 0, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  56. REGDAT(RCX, rcx, 1, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  57. REGDAT(RDX, rdx, 2, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  58. REGDAT(RBX, rbx, 3, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  59. REGDAT(RSP, rsp, 4, TyInt64, RA_DONTALLOCATE)
  60. REGDAT(RBP, rbp, 5, TyInt64, RA_DONTALLOCATE)
  61. REGDAT(RSI, rsi, 6, TyInt64, RA_CALLERSAVE)
  62. REGDAT(RDI, rdi, 7, TyInt64, RA_CALLERSAVE)
  63. REGDAT(R8, r8, 0, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  64. REGDAT(R9, r9, 1, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  65. REGDAT(R10, r10, 2, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  66. REGDAT(R11, r11, 3, TyInt64, RA_CALLERSAVE | RA_BYTEABLE)
  67. REGDAT(R12, r12, 4, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  68. REGDAT(R13, r13, 5, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  69. REGDAT(R14, r14, 6, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  70. REGDAT(R15, r15, 7, TyInt64, RA_CALLEESAVE | RA_BYTEABLE)
  71. REGDAT(XMM0, xmm0, 0, TyFloat64, 0)
  72. REGDAT(XMM1, xmm1, 1, TyFloat64, 0)
  73. REGDAT(XMM2, xmm2, 2, TyFloat64, 0)
  74. REGDAT(XMM3, xmm3, 3, TyFloat64, 0)
  75. REGDAT(XMM4, xmm4, 4, TyFloat64, 0)
  76. REGDAT(XMM5, xmm5, 5, TyFloat64, 0)
  77. REGDAT(XMM6, xmm6, 6, TyFloat64, 0)
  78. REGDAT(XMM7, xmm7, 7, TyFloat64, 0)
  79. REGDAT(XMM8, xmm8, 0, TyFloat64, 0)
  80. REGDAT(XMM9, xmm9, 1, TyFloat64, 0)
  81. REGDAT(XMM10, xmm10, 2, TyFloat64, 0)
  82. REGDAT(XMM11, xmm11, 3, TyFloat64, 0)
  83. REGDAT(XMM12, xmm12, 4, TyFloat64, 0)
  84. REGDAT(XMM13, xmm13, 5, TyFloat64, 0)
  85. REGDAT(XMM14, xmm14, 6, TyFloat64, 0)
  86. REGDAT(XMM15, xmm15, 7, TyFloat64, 0)
  87. #endif // !_WIN32
  88. #ifndef REG_INT_ARG
  89. #define REG_INT_ARG(Index, Name)
  90. #endif
  91. #ifndef REG_XMM_ARG
  92. #define REG_XMM_ARG(Index, Name)
  93. #endif
  94. #ifdef _WIN32
  95. REG_INT_ARG(0, RCX)
  96. REG_INT_ARG(1, RDX)
  97. REG_INT_ARG(2, R8)
  98. REG_INT_ARG(3, R9)
  99. REG_XMM_ARG(0, XMM0)
  100. REG_XMM_ARG(1, XMM1)
  101. REG_XMM_ARG(2, XMM2)
  102. REG_XMM_ARG(3, XMM3)
  103. #ifndef INT_ARG_REG_COUNT
  104. #define INT_ARG_REG_COUNT 4
  105. #endif
  106. #else // System V x64
  107. REG_INT_ARG(0, RDI)
  108. REG_INT_ARG(1, RSI)
  109. REG_INT_ARG(2, RDX)
  110. REG_INT_ARG(3, RCX)
  111. REG_INT_ARG(4, R8)
  112. REG_INT_ARG(5, R9)
  113. REG_XMM_ARG(0, XMM0)
  114. REG_XMM_ARG(1, XMM1)
  115. REG_XMM_ARG(2, XMM2)
  116. REG_XMM_ARG(3, XMM3)
  117. REG_XMM_ARG(4, XMM4)
  118. REG_XMM_ARG(5, XMM5)
  119. REG_XMM_ARG(6, XMM6)
  120. REG_XMM_ARG(7, XMM7)
  121. #ifndef INT_ARG_REG_COUNT
  122. #define INT_ARG_REG_COUNT 4
  123. #endif
  124. #endif // !_WIN32
  125. #undef REGDAT
  126. #undef REG_INT_ARG
  127. #undef REG_XMM_ARG