summaryrefslogtreecommitdiff
path: root/include/isa.h
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
committerCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
commit37da2899f40661e3e9631e497da8dc59b971cbd0 (patch)
treecbc6d4680e347d906f5fa7fca73214418741df72 /include/isa.h
parent54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff)
20060303a
Diffstat (limited to 'include/isa.h')
-rw-r--r--include/isa.h249
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))