ref: dd16eef8365cb0b9e4805c23291aadcaa596dd87
dir: /module/dis.m/
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.
#