isa.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. /*
  2. * VM instruction set
  3. */
  4. enum
  5. {
  6. INOP,
  7. IALT,
  8. INBALT,
  9. IGOTO,
  10. ICALL,
  11. IFRAME,
  12. ISPAWN,
  13. IRUNT,
  14. ILOAD,
  15. IMCALL,
  16. IMSPAWN,
  17. IMFRAME,
  18. IRET,
  19. IJMP,
  20. ICASE,
  21. IEXIT,
  22. INEW,
  23. INEWA,
  24. INEWCB,
  25. INEWCW,
  26. INEWCF,
  27. INEWCP,
  28. INEWCM,
  29. INEWCMP,
  30. ISEND,
  31. IRECV,
  32. ICONSB,
  33. ICONSW,
  34. ICONSP,
  35. ICONSF,
  36. ICONSM,
  37. ICONSMP,
  38. IHEADB,
  39. IHEADW,
  40. IHEADP,
  41. IHEADF,
  42. IHEADM,
  43. IHEADMP,
  44. ITAIL,
  45. ILEA,
  46. IINDX,
  47. IMOVP,
  48. IMOVM,
  49. IMOVMP,
  50. IMOVB,
  51. IMOVW,
  52. IMOVF,
  53. ICVTBW,
  54. ICVTWB,
  55. ICVTFW,
  56. ICVTWF,
  57. ICVTCA,
  58. ICVTAC,
  59. ICVTWC,
  60. ICVTCW,
  61. ICVTFC,
  62. ICVTCF,
  63. IADDB,
  64. IADDW,
  65. IADDF,
  66. ISUBB,
  67. ISUBW,
  68. ISUBF,
  69. IMULB,
  70. IMULW,
  71. IMULF,
  72. IDIVB,
  73. IDIVW,
  74. IDIVF,
  75. IMODW,
  76. IMODB,
  77. IANDB,
  78. IANDW,
  79. IORB,
  80. IORW,
  81. IXORB,
  82. IXORW,
  83. ISHLB,
  84. ISHLW,
  85. ISHRB,
  86. ISHRW,
  87. IINSC,
  88. IINDC,
  89. IADDC,
  90. ILENC,
  91. ILENA,
  92. ILENL,
  93. IBEQB,
  94. IBNEB,
  95. IBLTB,
  96. IBLEB,
  97. IBGTB,
  98. IBGEB,
  99. IBEQW,
  100. IBNEW,
  101. IBLTW,
  102. IBLEW,
  103. IBGTW,
  104. IBGEW,
  105. IBEQF,
  106. IBNEF,
  107. IBLTF,
  108. IBLEF,
  109. IBGTF,
  110. IBGEF,
  111. IBEQC,
  112. IBNEC,
  113. IBLTC,
  114. IBLEC,
  115. IBGTC,
  116. IBGEC,
  117. ISLICEA,
  118. ISLICELA,
  119. ISLICEC,
  120. IINDW,
  121. IINDF,
  122. IINDB,
  123. INEGF,
  124. IMOVL,
  125. IADDL,
  126. ISUBL,
  127. IDIVL,
  128. IMODL,
  129. IMULL,
  130. IANDL,
  131. IORL,
  132. IXORL,
  133. ISHLL,
  134. ISHRL,
  135. IBNEL,
  136. IBLTL,
  137. IBLEL,
  138. IBGTL,
  139. IBGEL,
  140. IBEQL,
  141. ICVTLF,
  142. ICVTFL,
  143. ICVTLW,
  144. ICVTWL,
  145. ICVTLC,
  146. ICVTCL,
  147. IHEADL,
  148. ICONSL,
  149. INEWCL,
  150. ICASEC,
  151. IINDL,
  152. IMOVPC,
  153. ITCMP,
  154. IMNEWZ,
  155. ICVTRF,
  156. ICVTFR,
  157. ICVTWS,
  158. ICVTSW,
  159. ILSRW,
  160. ILSRL,
  161. IECLR,
  162. INEWZ,
  163. INEWAZ,
  164. IRAISE,
  165. ICASEL,
  166. IMULX,
  167. IDIVX,
  168. ICVTXX,
  169. IMULX0,
  170. IDIVX0,
  171. ICVTXX0,
  172. IMULX1,
  173. IDIVX1,
  174. ICVTXX1,
  175. ICVTFX,
  176. ICVTXF,
  177. IEXPW,
  178. IEXPL,
  179. IEXPF,
  180. ISELF,
  181. /* Fix MAXDIS if you add opcodes */
  182. };
  183. enum
  184. {
  185. MAXDIS = ISELF+1,
  186. XMAGIC = 819248, /* Normal magic */
  187. SMAGIC = 923426, /* Signed module */
  188. AMP = 0x00, /* Src/Dst op addressing */
  189. AFP = 0x01,
  190. AIMM = 0x02,
  191. AXXX = 0x03,
  192. AIND = 0x04,
  193. AMASK = 0x07,
  194. AOFF = 0x08,
  195. AVAL = 0x10,
  196. ARM = 0xC0, /* Middle op addressing */
  197. AXNON = 0x00,
  198. AXIMM = 0x40,
  199. AXINF = 0x80,
  200. AXINM = 0xC0,
  201. DEFZ = 0,
  202. DEFB = 1, /* Byte */
  203. DEFW = 2, /* Word */
  204. DEFS = 3, /* Utf-string */
  205. DEFF = 4, /* Real value */
  206. DEFA = 5, /* Array */
  207. DIND = 6, /* Set index */
  208. DAPOP = 7, /* Restore address register */
  209. DEFL = 8, /* BIG */
  210. DEFSS = 9, /* String share - not used yet */
  211. DADEPTH = 4, /* Array address stack size */
  212. REGLINK = 0,
  213. REGFRAME= 1,
  214. REGMOD = 2,
  215. REGTYP = 3,
  216. REGRET = 4,
  217. NREG = 5,
  218. IBY2WD = 4,
  219. IBY2FT = 8,
  220. IBY2LG = 8,
  221. MUSTCOMPILE = (1<<0),
  222. DONTCOMPILE = (1<<1),
  223. SHAREMP = (1<<2),
  224. DYNMOD = (1<<3),
  225. HASLDT0 = (1<<4),
  226. HASEXCEPT = (1<<5),
  227. HASLDT = (1<<6),
  228. };
  229. #define DTYPE(x) (x>>4)
  230. #define DBYTE(x, l) ((x<<4)|l)
  231. #define DMAX (1<<4)
  232. #define DLEN(x) (x& (DMAX-1))
  233. #define SRC(x) ((x)<<3)
  234. #define DST(x) ((x)<<0)
  235. #define USRC(x) (((x)>>3)&AMASK)
  236. #define UDST(x) ((x)&AMASK)
  237. #define UXSRC(x) ((x)&(AMASK<<3))
  238. #define UXDST(x) ((x)&(AMASK<<0))