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