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