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