summaryrefslogtreecommitdiff
path: root/module/dis.m
diff options
context:
space:
mode:
Diffstat (limited to 'module/dis.m')
-rw-r--r--module/dis.m323
1 files changed, 323 insertions, 0 deletions
diff --git a/module/dis.m b/module/dis.m
new file mode 100644
index 00000000..27b47dcc
--- /dev/null
+++ b/module/dis.m
@@ -0,0 +1,323 @@
+Dis: module
+{
+ PATH: con "/dis/lib/dis.dis";
+
+ XMAGIC: con 819248;
+ SMAGIC: con 923426;
+ MUSTCOMPILE: con 1<<0;
+ DONTCOMPILE: con 1<<1;
+ SHAREMP: con 1<<2;
+ DYNMOD: con 1<<3;
+ HASLDT0: con 1<<4;
+ HASEXCEPT: con 1<<5;
+ HASLDT: con 1<<6;
+
+ AMP: con 16r00; # Src/Dst op addressing
+ AFP: con 16r01;
+ AIMM: con 16r02;
+ AXXX: con 16r03;
+ AIND: con 16r04;
+ AMASK: con 16r07;
+
+ ARM: con 16rC0; # Middle op addressing
+ AXNON: con 16r00;
+ AXIMM: con 16r40;
+ AXINF: con 16r80;
+ AXINM: con 16rC0;
+
+ DEFZ: con 0;
+ DEFB: con 1; # Byte
+ DEFW: con 2; # Word
+ DEFS: con 3; # Utf-string
+ DEFF: con 4; # Real value
+ DEFA: con 5; # Array
+ DIND: con 6; # Set index
+ DAPOP: con 7; # Restore address register
+ DEFL: con 8; # BIG
+ DMAX: con 1<<4;
+
+ Inst: adt
+ {
+ op: int;
+ addr: int;
+ mid: int;
+ src: int;
+ dst: int;
+ };
+
+ Type: adt
+ {
+ size: int;
+ np: int;
+ map: array of byte;
+ };
+
+ Data: adt
+ {
+ op: int; # encoded op
+ n: int; # number of elements
+ off: int; # byte offset in data space
+ pick {
+ Zero => # DEFZ
+ Bytes => # DEFB
+ bytes: array of byte;
+ Words => # DEFW
+ words: array of int;
+ String => # DEFS
+ str: string;
+ Reals => # DEFF
+ reals: array of real;
+ Array => # DEFA
+ typex: int;
+ length: int;
+ Aindex => # DIND
+ index: int;
+ Arestore => # DAPOP
+ Bigs => # DEFL
+ bigs: array of big;
+ }
+ };
+
+ Link: adt
+ {
+ pc: int;
+ desc: int;
+ sig: int;
+ name: string;
+ };
+
+ Import: adt
+ {
+ sig: int;
+ name: string;
+ };
+
+ Except: adt
+ {
+ s: string;
+ pc: int;
+ };
+
+ Handler: adt
+ {
+ pc1: int;
+ pc2: int;
+ eoff: int;
+ ne: int;
+ t: ref Type;
+ etab: array of ref Except;
+ };
+
+ Mod: adt
+ {
+ name: string;
+ srcpath: string;
+
+ magic: int;
+ rt: int;
+ ssize: int;
+ isize: int;
+ dsize: int;
+ tsize: int;
+ lsize: int;
+ entry: int;
+ entryt: int;
+
+ inst: array of ref Inst;
+ types: array of ref Type;
+ data: list of ref Data;
+ links: array of ref Link;
+ imports: array of array of ref Import;
+ handlers: array of ref Handler;
+
+ sign: array of byte;
+ };
+
+ INOP,
+ IALT,
+ INBALT,
+ IGOTO,
+ ICALL,
+ IFRAME,
+ ISPAWN,
+ IRUNT,
+ ILOAD,
+ IMCALL,
+ IMSPAWN,
+ IMFRAME,
+ IRET,
+ IJMP,
+ ICASE,
+ IEXIT,
+ INEW,
+ INEWA,
+ INEWCB,
+ INEWCW,
+ INEWCF,
+ INEWCP,
+ INEWCM,
+ INEWCMP,
+ ISEND,
+ IRECV,
+ ICONSB,
+ ICONSW,
+ ICONSP,
+ ICONSF,
+ ICONSM,
+ ICONSMP,
+ IHEADB,
+ IHEADW,
+ IHEADP,
+ IHEADF,
+ IHEADM,
+ IHEADMP,
+ ITAIL,
+ ILEA,
+ IINDX,
+ IMOVP,
+ IMOVM,
+ IMOVMP,
+ IMOVB,
+ IMOVW,
+ IMOVF,
+ ICVTBW,
+ ICVTWB,
+ ICVTFW,
+ ICVTWF,
+ ICVTCA,
+ ICVTAC,
+ ICVTWC,
+ ICVTCW,
+ ICVTFC,
+ ICVTCF,
+ IADDB,
+ IADDW,
+ IADDF,
+ ISUBB,
+ ISUBW,
+ ISUBF,
+ IMULB,
+ IMULW,
+ IMULF,
+ IDIVB,
+ IDIVW,
+ IDIVF,
+ IMODW,
+ IMODB,
+ IANDB,
+ IANDW,
+ IORB,
+ IORW,
+ IXORB,
+ IXORW,
+ ISHLB,
+ ISHLW,
+ ISHRB,
+ ISHRW,
+ IINSC,
+ IINDC,
+ IADDC,
+ ILENC,
+ ILENA,
+ ILENL,
+ IBEQB,
+ IBNEB,
+ IBLTB,
+ IBLEB,
+ IBGTB,
+ IBGEB,
+ IBEQW,
+ IBNEW,
+ IBLTW,
+ IBLEW,
+ IBGTW,
+ IBGEW,
+ IBEQF,
+ IBNEF,
+ IBLTF,
+ IBLEF,
+ IBGTF,
+ IBGEF,
+ IBEQC,
+ IBNEC,
+ IBLTC,
+ IBLEC,
+ IBGTC,
+ IBGEC,
+ ISLICEA,
+ ISLICELA,
+ ISLICEC,
+ IINDW,
+ IINDF,
+ IINDB,
+ INEGF,
+ IMOVL,
+ IADDL,
+ ISUBL,
+ IDIVL,
+ IMODL,
+ IMULL,
+ IANDL,
+ IORL,
+ IXORL,
+ ISHLL,
+ ISHRL,
+ IBNEL,
+ IBLTL,
+ IBLEL,
+ IBGTL,
+ IBGEL,
+ IBEQL,
+ ICVTLF,
+ ICVTFL,
+ ICVTLW,
+ ICVTWL,
+ ICVTLC,
+ ICVTCL,
+ IHEADL,
+ ICONSL,
+ INEWCL,
+ ICASEC,
+ IINDL,
+ IMOVPC,
+ ITCMP,
+ IMNEWZ,
+ ICVTRF,
+ ICVTFR,
+ ICVTWS,
+ ICVTSW,
+ ILSRW,
+ ILSRL,
+ IECLR,
+ INEWZ,
+ INEWAZ,
+ IRAISE,
+ ICASEL,
+ IMULX,
+ IDIVX,
+ ICVTXX,
+ IMULX0,
+ IDIVX0,
+ ICVTXX0,
+ IMULX1,
+ IDIVX1,
+ ICVTXX1,
+ ICVTFX,
+ ICVTXF,
+ IEXPW,
+ IEXPL,
+ IEXPF,
+ ISELF,
+ # add new instructions here
+ MAXDIS: con iota;
+
+ init: fn();
+ loadobj: fn(file: string): (ref Mod, string);
+ op2s: fn(op: int): string;
+ inst2s: fn(ins: ref Inst): string;
+ src: fn(file: string): string;
+};
+#
+# derived by Vita Nuova Limited 1998 from /appl/wm/rt.b and /include/isa.h, both
+# Copyright © 1996-1999 Lucent Technologies Inc. All rights reserved.
+#