diff options
Diffstat (limited to 'appl/cmd/limbo/isa.m')
| -rw-r--r-- | appl/cmd/limbo/isa.m | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/appl/cmd/limbo/isa.m b/appl/cmd/limbo/isa.m new file mode 100644 index 00000000..9e9936d0 --- /dev/null +++ b/appl/cmd/limbo/isa.m @@ -0,0 +1,247 @@ +# +# VM instruction set +# + 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, + # add new operators here + MAXDIS: con iota; + +XMAGIC: con 819248; # Normal magic +SMAGIC: con 923426; # Signed module + +AMP: con 16r00; # Src/Dst op addressing +AFP: con 16r01; +AIMM: con 16r2; +AXXX: con 16r03; +AIND: con 16r04; +AMASK: con 16r07; +AOFF: con 16r08; +AVAL: con 16r10; + +ARM: con 16rC0; # Middle op addressing +AXNON: con 16r00; +AXIMM: con 16r40; +AXINF: con 16r80; +AXINM: con 16rC0; + +DEFZ: con 0; +DEFB: con 1; # Byte +DEFW: con 2; # Word +DEFS: con 3; # Utf-string +DEFF: con 4; # Real value +DEFA: con 5; # Array +DIND: con 6; # Set index +DAPOP: con 7; # Restore address register +DEFL: con 8; # BIG + +DADEPTH: con 4; # Array address stack size + +REGLINK: con 0; +REGFRAME: con 1; +REGMOD: con 2; +REGTYP: con 3; +REGRET: con 4; +NREG: con 5; + +IBY2WD: con 4; +IBY2FT: con 8; +IBY2LG: con 8; + +MUSTCOMPILE: con 1<<0; +DONTCOMPILE: con 1<<1; +SHAREMP: con 1<<2; +DYNMOD: con 1<<3; +HASLDT0: con 1<<4; +HASEXCEPT: con 1<<5; +HASLDT: con 1<<6; + +DMAX: con 1 << 4; + +#define DTYPE(x) (x>>4) +#define DBYTE(x, l) ((x<<4)|l) +#define DMAX (1<<4) +#define DLEN(x) (x& (DMAX-1)) + +DBYTE: con 4; +SRC: con 3; +DST: con 0; + +#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)) |
