1*37da2899SCharles.Forsyth /* 2*37da2899SCharles.Forsyth * VM instruction set 3*37da2899SCharles.Forsyth */ 4*37da2899SCharles.Forsyth enum 5*37da2899SCharles.Forsyth { 6*37da2899SCharles.Forsyth INOP, 7*37da2899SCharles.Forsyth IALT, 8*37da2899SCharles.Forsyth INBALT, 9*37da2899SCharles.Forsyth IGOTO, 10*37da2899SCharles.Forsyth ICALL, 11*37da2899SCharles.Forsyth IFRAME, 12*37da2899SCharles.Forsyth ISPAWN, 13*37da2899SCharles.Forsyth IRUNT, 14*37da2899SCharles.Forsyth ILOAD, 15*37da2899SCharles.Forsyth IMCALL, 16*37da2899SCharles.Forsyth IMSPAWN, 17*37da2899SCharles.Forsyth IMFRAME, 18*37da2899SCharles.Forsyth IRET, 19*37da2899SCharles.Forsyth IJMP, 20*37da2899SCharles.Forsyth ICASE, 21*37da2899SCharles.Forsyth IEXIT, 22*37da2899SCharles.Forsyth INEW, 23*37da2899SCharles.Forsyth INEWA, 24*37da2899SCharles.Forsyth INEWCB, 25*37da2899SCharles.Forsyth INEWCW, 26*37da2899SCharles.Forsyth INEWCF, 27*37da2899SCharles.Forsyth INEWCP, 28*37da2899SCharles.Forsyth INEWCM, 29*37da2899SCharles.Forsyth INEWCMP, 30*37da2899SCharles.Forsyth ISEND, 31*37da2899SCharles.Forsyth IRECV, 32*37da2899SCharles.Forsyth ICONSB, 33*37da2899SCharles.Forsyth ICONSW, 34*37da2899SCharles.Forsyth ICONSP, 35*37da2899SCharles.Forsyth ICONSF, 36*37da2899SCharles.Forsyth ICONSM, 37*37da2899SCharles.Forsyth ICONSMP, 38*37da2899SCharles.Forsyth IHEADB, 39*37da2899SCharles.Forsyth IHEADW, 40*37da2899SCharles.Forsyth IHEADP, 41*37da2899SCharles.Forsyth IHEADF, 42*37da2899SCharles.Forsyth IHEADM, 43*37da2899SCharles.Forsyth IHEADMP, 44*37da2899SCharles.Forsyth ITAIL, 45*37da2899SCharles.Forsyth ILEA, 46*37da2899SCharles.Forsyth IINDX, 47*37da2899SCharles.Forsyth IMOVP, 48*37da2899SCharles.Forsyth IMOVM, 49*37da2899SCharles.Forsyth IMOVMP, 50*37da2899SCharles.Forsyth IMOVB, 51*37da2899SCharles.Forsyth IMOVW, 52*37da2899SCharles.Forsyth IMOVF, 53*37da2899SCharles.Forsyth ICVTBW, 54*37da2899SCharles.Forsyth ICVTWB, 55*37da2899SCharles.Forsyth ICVTFW, 56*37da2899SCharles.Forsyth ICVTWF, 57*37da2899SCharles.Forsyth ICVTCA, 58*37da2899SCharles.Forsyth ICVTAC, 59*37da2899SCharles.Forsyth ICVTWC, 60*37da2899SCharles.Forsyth ICVTCW, 61*37da2899SCharles.Forsyth ICVTFC, 62*37da2899SCharles.Forsyth ICVTCF, 63*37da2899SCharles.Forsyth IADDB, 64*37da2899SCharles.Forsyth IADDW, 65*37da2899SCharles.Forsyth IADDF, 66*37da2899SCharles.Forsyth ISUBB, 67*37da2899SCharles.Forsyth ISUBW, 68*37da2899SCharles.Forsyth ISUBF, 69*37da2899SCharles.Forsyth IMULB, 70*37da2899SCharles.Forsyth IMULW, 71*37da2899SCharles.Forsyth IMULF, 72*37da2899SCharles.Forsyth IDIVB, 73*37da2899SCharles.Forsyth IDIVW, 74*37da2899SCharles.Forsyth IDIVF, 75*37da2899SCharles.Forsyth IMODW, 76*37da2899SCharles.Forsyth IMODB, 77*37da2899SCharles.Forsyth IANDB, 78*37da2899SCharles.Forsyth IANDW, 79*37da2899SCharles.Forsyth IORB, 80*37da2899SCharles.Forsyth IORW, 81*37da2899SCharles.Forsyth IXORB, 82*37da2899SCharles.Forsyth IXORW, 83*37da2899SCharles.Forsyth ISHLB, 84*37da2899SCharles.Forsyth ISHLW, 85*37da2899SCharles.Forsyth ISHRB, 86*37da2899SCharles.Forsyth ISHRW, 87*37da2899SCharles.Forsyth IINSC, 88*37da2899SCharles.Forsyth IINDC, 89*37da2899SCharles.Forsyth IADDC, 90*37da2899SCharles.Forsyth ILENC, 91*37da2899SCharles.Forsyth ILENA, 92*37da2899SCharles.Forsyth ILENL, 93*37da2899SCharles.Forsyth IBEQB, 94*37da2899SCharles.Forsyth IBNEB, 95*37da2899SCharles.Forsyth IBLTB, 96*37da2899SCharles.Forsyth IBLEB, 97*37da2899SCharles.Forsyth IBGTB, 98*37da2899SCharles.Forsyth IBGEB, 99*37da2899SCharles.Forsyth IBEQW, 100*37da2899SCharles.Forsyth IBNEW, 101*37da2899SCharles.Forsyth IBLTW, 102*37da2899SCharles.Forsyth IBLEW, 103*37da2899SCharles.Forsyth IBGTW, 104*37da2899SCharles.Forsyth IBGEW, 105*37da2899SCharles.Forsyth IBEQF, 106*37da2899SCharles.Forsyth IBNEF, 107*37da2899SCharles.Forsyth IBLTF, 108*37da2899SCharles.Forsyth IBLEF, 109*37da2899SCharles.Forsyth IBGTF, 110*37da2899SCharles.Forsyth IBGEF, 111*37da2899SCharles.Forsyth IBEQC, 112*37da2899SCharles.Forsyth IBNEC, 113*37da2899SCharles.Forsyth IBLTC, 114*37da2899SCharles.Forsyth IBLEC, 115*37da2899SCharles.Forsyth IBGTC, 116*37da2899SCharles.Forsyth IBGEC, 117*37da2899SCharles.Forsyth ISLICEA, 118*37da2899SCharles.Forsyth ISLICELA, 119*37da2899SCharles.Forsyth ISLICEC, 120*37da2899SCharles.Forsyth IINDW, 121*37da2899SCharles.Forsyth IINDF, 122*37da2899SCharles.Forsyth IINDB, 123*37da2899SCharles.Forsyth INEGF, 124*37da2899SCharles.Forsyth IMOVL, 125*37da2899SCharles.Forsyth IADDL, 126*37da2899SCharles.Forsyth ISUBL, 127*37da2899SCharles.Forsyth IDIVL, 128*37da2899SCharles.Forsyth IMODL, 129*37da2899SCharles.Forsyth IMULL, 130*37da2899SCharles.Forsyth IANDL, 131*37da2899SCharles.Forsyth IORL, 132*37da2899SCharles.Forsyth IXORL, 133*37da2899SCharles.Forsyth ISHLL, 134*37da2899SCharles.Forsyth ISHRL, 135*37da2899SCharles.Forsyth IBNEL, 136*37da2899SCharles.Forsyth IBLTL, 137*37da2899SCharles.Forsyth IBLEL, 138*37da2899SCharles.Forsyth IBGTL, 139*37da2899SCharles.Forsyth IBGEL, 140*37da2899SCharles.Forsyth IBEQL, 141*37da2899SCharles.Forsyth ICVTLF, 142*37da2899SCharles.Forsyth ICVTFL, 143*37da2899SCharles.Forsyth ICVTLW, 144*37da2899SCharles.Forsyth ICVTWL, 145*37da2899SCharles.Forsyth ICVTLC, 146*37da2899SCharles.Forsyth ICVTCL, 147*37da2899SCharles.Forsyth IHEADL, 148*37da2899SCharles.Forsyth ICONSL, 149*37da2899SCharles.Forsyth INEWCL, 150*37da2899SCharles.Forsyth ICASEC, 151*37da2899SCharles.Forsyth IINDL, 152*37da2899SCharles.Forsyth IMOVPC, 153*37da2899SCharles.Forsyth ITCMP, 154*37da2899SCharles.Forsyth IMNEWZ, 155*37da2899SCharles.Forsyth ICVTRF, 156*37da2899SCharles.Forsyth ICVTFR, 157*37da2899SCharles.Forsyth ICVTWS, 158*37da2899SCharles.Forsyth ICVTSW, 159*37da2899SCharles.Forsyth ILSRW, 160*37da2899SCharles.Forsyth ILSRL, 161*37da2899SCharles.Forsyth IECLR, 162*37da2899SCharles.Forsyth INEWZ, 163*37da2899SCharles.Forsyth INEWAZ, 164*37da2899SCharles.Forsyth IRAISE, 165*37da2899SCharles.Forsyth ICASEL, 166*37da2899SCharles.Forsyth IMULX, 167*37da2899SCharles.Forsyth IDIVX, 168*37da2899SCharles.Forsyth ICVTXX, 169*37da2899SCharles.Forsyth IMULX0, 170*37da2899SCharles.Forsyth IDIVX0, 171*37da2899SCharles.Forsyth ICVTXX0, 172*37da2899SCharles.Forsyth IMULX1, 173*37da2899SCharles.Forsyth IDIVX1, 174*37da2899SCharles.Forsyth ICVTXX1, 175*37da2899SCharles.Forsyth ICVTFX, 176*37da2899SCharles.Forsyth ICVTXF, 177*37da2899SCharles.Forsyth IEXPW, 178*37da2899SCharles.Forsyth IEXPL, 179*37da2899SCharles.Forsyth IEXPF, 180*37da2899SCharles.Forsyth ISELF, 181*37da2899SCharles.Forsyth /* Fix MAXDIS if you add opcodes */ 182*37da2899SCharles.Forsyth }; 183*37da2899SCharles.Forsyth 184*37da2899SCharles.Forsyth enum 185*37da2899SCharles.Forsyth { 186*37da2899SCharles.Forsyth MAXDIS = ISELF+1, 187*37da2899SCharles.Forsyth 188*37da2899SCharles.Forsyth XMAGIC = 819248, /* Normal magic */ 189*37da2899SCharles.Forsyth SMAGIC = 923426, /* Signed module */ 190*37da2899SCharles.Forsyth 191*37da2899SCharles.Forsyth AMP = 0x00, /* Src/Dst op addressing */ 192*37da2899SCharles.Forsyth AFP = 0x01, 193*37da2899SCharles.Forsyth AIMM = 0x02, 194*37da2899SCharles.Forsyth AXXX = 0x03, 195*37da2899SCharles.Forsyth AIND = 0x04, 196*37da2899SCharles.Forsyth AMASK = 0x07, 197*37da2899SCharles.Forsyth AOFF = 0x08, 198*37da2899SCharles.Forsyth AVAL = 0x10, 199*37da2899SCharles.Forsyth 200*37da2899SCharles.Forsyth ARM = 0xC0, /* Middle op addressing */ 201*37da2899SCharles.Forsyth AXNON = 0x00, 202*37da2899SCharles.Forsyth AXIMM = 0x40, 203*37da2899SCharles.Forsyth AXINF = 0x80, 204*37da2899SCharles.Forsyth AXINM = 0xC0, 205*37da2899SCharles.Forsyth 206*37da2899SCharles.Forsyth DEFZ = 0, 207*37da2899SCharles.Forsyth DEFB = 1, /* Byte */ 208*37da2899SCharles.Forsyth DEFW = 2, /* Word */ 209*37da2899SCharles.Forsyth DEFS = 3, /* Utf-string */ 210*37da2899SCharles.Forsyth DEFF = 4, /* Real value */ 211*37da2899SCharles.Forsyth DEFA = 5, /* Array */ 212*37da2899SCharles.Forsyth DIND = 6, /* Set index */ 213*37da2899SCharles.Forsyth DAPOP = 7, /* Restore address register */ 214*37da2899SCharles.Forsyth DEFL = 8, /* BIG */ 215*37da2899SCharles.Forsyth DEFSS = 9, /* String share - not used yet */ 216*37da2899SCharles.Forsyth 217*37da2899SCharles.Forsyth DADEPTH = 4, /* Array address stack size */ 218*37da2899SCharles.Forsyth 219*37da2899SCharles.Forsyth REGLINK = 0, 220*37da2899SCharles.Forsyth REGFRAME= 1, 221*37da2899SCharles.Forsyth REGMOD = 2, 222*37da2899SCharles.Forsyth REGTYP = 3, 223*37da2899SCharles.Forsyth REGRET = 4, 224*37da2899SCharles.Forsyth NREG = 5, 225*37da2899SCharles.Forsyth 226*37da2899SCharles.Forsyth IBY2WD = 4, 227*37da2899SCharles.Forsyth IBY2FT = 8, 228*37da2899SCharles.Forsyth IBY2LG = 8, 229*37da2899SCharles.Forsyth 230*37da2899SCharles.Forsyth MUSTCOMPILE = (1<<0), 231*37da2899SCharles.Forsyth DONTCOMPILE = (1<<1), 232*37da2899SCharles.Forsyth SHAREMP = (1<<2), 233*37da2899SCharles.Forsyth DYNMOD = (1<<3), 234*37da2899SCharles.Forsyth HASLDT0 = (1<<4), 235*37da2899SCharles.Forsyth HASEXCEPT = (1<<5), 236*37da2899SCharles.Forsyth HASLDT = (1<<6), 237*37da2899SCharles.Forsyth }; 238*37da2899SCharles.Forsyth 239*37da2899SCharles.Forsyth #define DTYPE(x) (x>>4) 240*37da2899SCharles.Forsyth #define DBYTE(x, l) ((x<<4)|l) 241*37da2899SCharles.Forsyth #define DMAX (1<<4) 242*37da2899SCharles.Forsyth #define DLEN(x) (x& (DMAX-1)) 243*37da2899SCharles.Forsyth 244*37da2899SCharles.Forsyth #define SRC(x) ((x)<<3) 245*37da2899SCharles.Forsyth #define DST(x) ((x)<<0) 246*37da2899SCharles.Forsyth #define USRC(x) (((x)>>3)&AMASK) 247*37da2899SCharles.Forsyth #define UDST(x) ((x)&AMASK) 248*37da2899SCharles.Forsyth #define UXSRC(x) ((x)&(AMASK<<3)) 249*37da2899SCharles.Forsyth #define UXDST(x) ((x)&(AMASK<<0)) 250