123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- /*
- * VM instruction set
- */
- enum
- {
- 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,
- /* Fix MAXDIS if you add opcodes */
- };
- enum
- {
- MAXDIS = ISELF+1,
- XMAGIC = 819248, /* Normal magic */
- SMAGIC = 923426, /* Signed module */
- AMP = 0x00, /* Src/Dst op addressing */
- AFP = 0x01,
- AIMM = 0x02,
- AXXX = 0x03,
- AIND = 0x04,
- AMASK = 0x07,
- AOFF = 0x08,
- AVAL = 0x10,
- ARM = 0xC0, /* Middle op addressing */
- AXNON = 0x00,
- AXIMM = 0x40,
- AXINF = 0x80,
- AXINM = 0xC0,
- DEFZ = 0,
- DEFB = 1, /* Byte */
- DEFW = 2, /* Word */
- DEFS = 3, /* Utf-string */
- DEFF = 4, /* Real value */
- DEFA = 5, /* Array */
- DIND = 6, /* Set index */
- DAPOP = 7, /* Restore address register */
- DEFL = 8, /* BIG */
- DEFSS = 9, /* String share - not used yet */
- DADEPTH = 4, /* Array address stack size */
- REGLINK = 0,
- REGFRAME= 1,
- REGMOD = 2,
- REGTYP = 3,
- REGRET = 4,
- NREG = 5,
- IBY2WD = 4,
- IBY2FT = 8,
- IBY2LG = 8,
- MUSTCOMPILE = (1<<0),
- DONTCOMPILE = (1<<1),
- SHAREMP = (1<<2),
- DYNMOD = (1<<3),
- HASLDT0 = (1<<4),
- HASEXCEPT = (1<<5),
- HASLDT = (1<<6),
- };
- #define DTYPE(x) (x>>4)
- #define DBYTE(x, l) ((x<<4)|l)
- #define DMAX (1<<4)
- #define DLEN(x) (x& (DMAX-1))
- #define SRC(x) ((x)<<3)
- #define DST(x) ((x)<<0)
- #define USRC(x) (((x)>>3)&AMASK)
- #define UDST(x) ((x)&AMASK)
- #define UXSRC(x) ((x)&(AMASK<<3))
- #define UXDST(x) ((x)&(AMASK<<0))
|