dis.m 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. Dis: module
  2. {
  3. PATH: con "/dis/lib/dis.dis";
  4. XMAGIC: con 819248;
  5. SMAGIC: con 923426;
  6. MUSTCOMPILE: con 1<<0;
  7. DONTCOMPILE: con 1<<1;
  8. SHAREMP: con 1<<2;
  9. DYNMOD: con 1<<3;
  10. HASLDT0: con 1<<4;
  11. HASEXCEPT: con 1<<5;
  12. HASLDT: con 1<<6;
  13. AMP: con 16r00; # Src/Dst op addressing
  14. AFP: con 16r01;
  15. AIMM: con 16r02;
  16. AXXX: con 16r03;
  17. AIND: con 16r04;
  18. AMASK: con 16r07;
  19. ARM: con 16rC0; # Middle op addressing
  20. AXNON: con 16r00;
  21. AXIMM: con 16r40;
  22. AXINF: con 16r80;
  23. AXINM: con 16rC0;
  24. DEFZ: con 0;
  25. DEFB: con 1; # Byte
  26. DEFW: con 2; # Word
  27. DEFS: con 3; # Utf-string
  28. DEFF: con 4; # Real value
  29. DEFA: con 5; # Array
  30. DIND: con 6; # Set index
  31. DAPOP: con 7; # Restore address register
  32. DEFL: con 8; # BIG
  33. DMAX: con 1<<4;
  34. Inst: adt
  35. {
  36. op: int;
  37. addr: int;
  38. mid: int;
  39. src: int;
  40. dst: int;
  41. };
  42. Type: adt
  43. {
  44. size: int;
  45. np: int;
  46. map: array of byte;
  47. };
  48. Data: adt
  49. {
  50. op: int; # encoded op
  51. n: int; # number of elements
  52. off: int; # byte offset in data space
  53. pick {
  54. Zero => # DEFZ
  55. Bytes => # DEFB
  56. bytes: array of byte;
  57. Words => # DEFW
  58. words: array of int;
  59. String => # DEFS
  60. str: string;
  61. Reals => # DEFF
  62. reals: array of real;
  63. Array => # DEFA
  64. typex: int;
  65. length: int;
  66. Aindex => # DIND
  67. index: int;
  68. Arestore => # DAPOP
  69. Bigs => # DEFL
  70. bigs: array of big;
  71. }
  72. };
  73. Link: adt
  74. {
  75. pc: int;
  76. desc: int;
  77. sig: int;
  78. name: string;
  79. };
  80. Import: adt
  81. {
  82. sig: int;
  83. name: string;
  84. };
  85. Except: adt
  86. {
  87. s: string;
  88. pc: int;
  89. };
  90. Handler: adt
  91. {
  92. pc1: int;
  93. pc2: int;
  94. eoff: int;
  95. ne: int;
  96. t: ref Type;
  97. etab: array of ref Except;
  98. };
  99. Mod: adt
  100. {
  101. name: string;
  102. srcpath: string;
  103. magic: int;
  104. rt: int;
  105. ssize: int;
  106. isize: int;
  107. dsize: int;
  108. tsize: int;
  109. lsize: int;
  110. entry: int;
  111. entryt: int;
  112. inst: array of ref Inst;
  113. types: array of ref Type;
  114. data: list of ref Data;
  115. links: array of ref Link;
  116. imports: array of array of ref Import;
  117. handlers: array of ref Handler;
  118. sign: array of byte;
  119. };
  120. INOP,
  121. IALT,
  122. INBALT,
  123. IGOTO,
  124. ICALL,
  125. IFRAME,
  126. ISPAWN,
  127. IRUNT,
  128. ILOAD,
  129. IMCALL,
  130. IMSPAWN,
  131. IMFRAME,
  132. IRET,
  133. IJMP,
  134. ICASE,
  135. IEXIT,
  136. INEW,
  137. INEWA,
  138. INEWCB,
  139. INEWCW,
  140. INEWCF,
  141. INEWCP,
  142. INEWCM,
  143. INEWCMP,
  144. ISEND,
  145. IRECV,
  146. ICONSB,
  147. ICONSW,
  148. ICONSP,
  149. ICONSF,
  150. ICONSM,
  151. ICONSMP,
  152. IHEADB,
  153. IHEADW,
  154. IHEADP,
  155. IHEADF,
  156. IHEADM,
  157. IHEADMP,
  158. ITAIL,
  159. ILEA,
  160. IINDX,
  161. IMOVP,
  162. IMOVM,
  163. IMOVMP,
  164. IMOVB,
  165. IMOVW,
  166. IMOVF,
  167. ICVTBW,
  168. ICVTWB,
  169. ICVTFW,
  170. ICVTWF,
  171. ICVTCA,
  172. ICVTAC,
  173. ICVTWC,
  174. ICVTCW,
  175. ICVTFC,
  176. ICVTCF,
  177. IADDB,
  178. IADDW,
  179. IADDF,
  180. ISUBB,
  181. ISUBW,
  182. ISUBF,
  183. IMULB,
  184. IMULW,
  185. IMULF,
  186. IDIVB,
  187. IDIVW,
  188. IDIVF,
  189. IMODW,
  190. IMODB,
  191. IANDB,
  192. IANDW,
  193. IORB,
  194. IORW,
  195. IXORB,
  196. IXORW,
  197. ISHLB,
  198. ISHLW,
  199. ISHRB,
  200. ISHRW,
  201. IINSC,
  202. IINDC,
  203. IADDC,
  204. ILENC,
  205. ILENA,
  206. ILENL,
  207. IBEQB,
  208. IBNEB,
  209. IBLTB,
  210. IBLEB,
  211. IBGTB,
  212. IBGEB,
  213. IBEQW,
  214. IBNEW,
  215. IBLTW,
  216. IBLEW,
  217. IBGTW,
  218. IBGEW,
  219. IBEQF,
  220. IBNEF,
  221. IBLTF,
  222. IBLEF,
  223. IBGTF,
  224. IBGEF,
  225. IBEQC,
  226. IBNEC,
  227. IBLTC,
  228. IBLEC,
  229. IBGTC,
  230. IBGEC,
  231. ISLICEA,
  232. ISLICELA,
  233. ISLICEC,
  234. IINDW,
  235. IINDF,
  236. IINDB,
  237. INEGF,
  238. IMOVL,
  239. IADDL,
  240. ISUBL,
  241. IDIVL,
  242. IMODL,
  243. IMULL,
  244. IANDL,
  245. IORL,
  246. IXORL,
  247. ISHLL,
  248. ISHRL,
  249. IBNEL,
  250. IBLTL,
  251. IBLEL,
  252. IBGTL,
  253. IBGEL,
  254. IBEQL,
  255. ICVTLF,
  256. ICVTFL,
  257. ICVTLW,
  258. ICVTWL,
  259. ICVTLC,
  260. ICVTCL,
  261. IHEADL,
  262. ICONSL,
  263. INEWCL,
  264. ICASEC,
  265. IINDL,
  266. IMOVPC,
  267. ITCMP,
  268. IMNEWZ,
  269. ICVTRF,
  270. ICVTFR,
  271. ICVTWS,
  272. ICVTSW,
  273. ILSRW,
  274. ILSRL,
  275. IECLR,
  276. INEWZ,
  277. INEWAZ,
  278. IRAISE,
  279. ICASEL,
  280. IMULX,
  281. IDIVX,
  282. ICVTXX,
  283. IMULX0,
  284. IDIVX0,
  285. ICVTXX0,
  286. IMULX1,
  287. IDIVX1,
  288. ICVTXX1,
  289. ICVTFX,
  290. ICVTXF,
  291. IEXPW,
  292. IEXPL,
  293. IEXPF,
  294. ISELF,
  295. # add new instructions here
  296. MAXDIS: con iota;
  297. init: fn();
  298. loadobj: fn(file: string): (ref Mod, string);
  299. op2s: fn(op: int): string;
  300. inst2s: fn(ins: ref Inst): string;
  301. src: fn(file: string): string;
  302. };
  303. #
  304. # derived by Vita Nuova Limited 1998 from /appl/wm/rt.b and /include/isa.h, both
  305. # Copyright © 1996-1999 Lucent Technologies Inc. All rights reserved.
  306. #