diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
| commit | 37da2899f40661e3e9631e497da8dc59b971cbd0 (patch) | |
| tree | cbc6d4680e347d906f5fa7fca73214418741df72 /include/isa.h | |
| parent | 54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff) | |
20060303a
Diffstat (limited to 'include/isa.h')
| -rw-r--r-- | include/isa.h | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/include/isa.h b/include/isa.h new file mode 100644 index 00000000..b59676bd --- /dev/null +++ b/include/isa.h @@ -0,0 +1,249 @@ +/* + * 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)) |
