shithub: purgatorio

ref: 5edeca01b0622463a65c126ebcc29314013fd928
dir: /appl/cmd/limbo/isa.m/

View raw version
#
# 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))