diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-22 20:52:35 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-22 20:52:35 +0000 |
| commit | 46439007cf417cbd9ac8049bb4122c890097a0fa (patch) | |
| tree | 6fdb25e5f3a2b6d5657eb23b35774b631d4d97e4 /module/dis.m | |
| parent | 37da2899f40661e3e9631e497da8dc59b971cbd0 (diff) | |
20060303-partial
Diffstat (limited to 'module/dis.m')
| -rw-r--r-- | module/dis.m | 323 |
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. +# |
