xref: /inferno-os/include/isa.h (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth /*
2*37da2899SCharles.Forsyth  * VM instruction set
3*37da2899SCharles.Forsyth  */
4*37da2899SCharles.Forsyth enum
5*37da2899SCharles.Forsyth {
6*37da2899SCharles.Forsyth 	INOP,
7*37da2899SCharles.Forsyth 	IALT,
8*37da2899SCharles.Forsyth 	INBALT,
9*37da2899SCharles.Forsyth 	IGOTO,
10*37da2899SCharles.Forsyth 	ICALL,
11*37da2899SCharles.Forsyth 	IFRAME,
12*37da2899SCharles.Forsyth 	ISPAWN,
13*37da2899SCharles.Forsyth 	IRUNT,
14*37da2899SCharles.Forsyth 	ILOAD,
15*37da2899SCharles.Forsyth 	IMCALL,
16*37da2899SCharles.Forsyth 	IMSPAWN,
17*37da2899SCharles.Forsyth 	IMFRAME,
18*37da2899SCharles.Forsyth 	IRET,
19*37da2899SCharles.Forsyth 	IJMP,
20*37da2899SCharles.Forsyth 	ICASE,
21*37da2899SCharles.Forsyth 	IEXIT,
22*37da2899SCharles.Forsyth 	INEW,
23*37da2899SCharles.Forsyth 	INEWA,
24*37da2899SCharles.Forsyth 	INEWCB,
25*37da2899SCharles.Forsyth 	INEWCW,
26*37da2899SCharles.Forsyth 	INEWCF,
27*37da2899SCharles.Forsyth 	INEWCP,
28*37da2899SCharles.Forsyth 	INEWCM,
29*37da2899SCharles.Forsyth 	INEWCMP,
30*37da2899SCharles.Forsyth 	ISEND,
31*37da2899SCharles.Forsyth 	IRECV,
32*37da2899SCharles.Forsyth 	ICONSB,
33*37da2899SCharles.Forsyth 	ICONSW,
34*37da2899SCharles.Forsyth 	ICONSP,
35*37da2899SCharles.Forsyth 	ICONSF,
36*37da2899SCharles.Forsyth 	ICONSM,
37*37da2899SCharles.Forsyth 	ICONSMP,
38*37da2899SCharles.Forsyth 	IHEADB,
39*37da2899SCharles.Forsyth 	IHEADW,
40*37da2899SCharles.Forsyth 	IHEADP,
41*37da2899SCharles.Forsyth 	IHEADF,
42*37da2899SCharles.Forsyth 	IHEADM,
43*37da2899SCharles.Forsyth 	IHEADMP,
44*37da2899SCharles.Forsyth 	ITAIL,
45*37da2899SCharles.Forsyth 	ILEA,
46*37da2899SCharles.Forsyth 	IINDX,
47*37da2899SCharles.Forsyth 	IMOVP,
48*37da2899SCharles.Forsyth 	IMOVM,
49*37da2899SCharles.Forsyth 	IMOVMP,
50*37da2899SCharles.Forsyth 	IMOVB,
51*37da2899SCharles.Forsyth 	IMOVW,
52*37da2899SCharles.Forsyth 	IMOVF,
53*37da2899SCharles.Forsyth 	ICVTBW,
54*37da2899SCharles.Forsyth 	ICVTWB,
55*37da2899SCharles.Forsyth 	ICVTFW,
56*37da2899SCharles.Forsyth 	ICVTWF,
57*37da2899SCharles.Forsyth 	ICVTCA,
58*37da2899SCharles.Forsyth 	ICVTAC,
59*37da2899SCharles.Forsyth 	ICVTWC,
60*37da2899SCharles.Forsyth 	ICVTCW,
61*37da2899SCharles.Forsyth 	ICVTFC,
62*37da2899SCharles.Forsyth 	ICVTCF,
63*37da2899SCharles.Forsyth 	IADDB,
64*37da2899SCharles.Forsyth 	IADDW,
65*37da2899SCharles.Forsyth 	IADDF,
66*37da2899SCharles.Forsyth 	ISUBB,
67*37da2899SCharles.Forsyth 	ISUBW,
68*37da2899SCharles.Forsyth 	ISUBF,
69*37da2899SCharles.Forsyth 	IMULB,
70*37da2899SCharles.Forsyth 	IMULW,
71*37da2899SCharles.Forsyth 	IMULF,
72*37da2899SCharles.Forsyth 	IDIVB,
73*37da2899SCharles.Forsyth 	IDIVW,
74*37da2899SCharles.Forsyth 	IDIVF,
75*37da2899SCharles.Forsyth 	IMODW,
76*37da2899SCharles.Forsyth 	IMODB,
77*37da2899SCharles.Forsyth 	IANDB,
78*37da2899SCharles.Forsyth 	IANDW,
79*37da2899SCharles.Forsyth 	IORB,
80*37da2899SCharles.Forsyth 	IORW,
81*37da2899SCharles.Forsyth 	IXORB,
82*37da2899SCharles.Forsyth 	IXORW,
83*37da2899SCharles.Forsyth 	ISHLB,
84*37da2899SCharles.Forsyth 	ISHLW,
85*37da2899SCharles.Forsyth 	ISHRB,
86*37da2899SCharles.Forsyth 	ISHRW,
87*37da2899SCharles.Forsyth 	IINSC,
88*37da2899SCharles.Forsyth 	IINDC,
89*37da2899SCharles.Forsyth 	IADDC,
90*37da2899SCharles.Forsyth 	ILENC,
91*37da2899SCharles.Forsyth 	ILENA,
92*37da2899SCharles.Forsyth 	ILENL,
93*37da2899SCharles.Forsyth 	IBEQB,
94*37da2899SCharles.Forsyth 	IBNEB,
95*37da2899SCharles.Forsyth 	IBLTB,
96*37da2899SCharles.Forsyth 	IBLEB,
97*37da2899SCharles.Forsyth 	IBGTB,
98*37da2899SCharles.Forsyth 	IBGEB,
99*37da2899SCharles.Forsyth 	IBEQW,
100*37da2899SCharles.Forsyth 	IBNEW,
101*37da2899SCharles.Forsyth 	IBLTW,
102*37da2899SCharles.Forsyth 	IBLEW,
103*37da2899SCharles.Forsyth 	IBGTW,
104*37da2899SCharles.Forsyth 	IBGEW,
105*37da2899SCharles.Forsyth 	IBEQF,
106*37da2899SCharles.Forsyth 	IBNEF,
107*37da2899SCharles.Forsyth 	IBLTF,
108*37da2899SCharles.Forsyth 	IBLEF,
109*37da2899SCharles.Forsyth 	IBGTF,
110*37da2899SCharles.Forsyth 	IBGEF,
111*37da2899SCharles.Forsyth 	IBEQC,
112*37da2899SCharles.Forsyth 	IBNEC,
113*37da2899SCharles.Forsyth 	IBLTC,
114*37da2899SCharles.Forsyth 	IBLEC,
115*37da2899SCharles.Forsyth 	IBGTC,
116*37da2899SCharles.Forsyth 	IBGEC,
117*37da2899SCharles.Forsyth 	ISLICEA,
118*37da2899SCharles.Forsyth 	ISLICELA,
119*37da2899SCharles.Forsyth 	ISLICEC,
120*37da2899SCharles.Forsyth 	IINDW,
121*37da2899SCharles.Forsyth 	IINDF,
122*37da2899SCharles.Forsyth 	IINDB,
123*37da2899SCharles.Forsyth 	INEGF,
124*37da2899SCharles.Forsyth 	IMOVL,
125*37da2899SCharles.Forsyth 	IADDL,
126*37da2899SCharles.Forsyth 	ISUBL,
127*37da2899SCharles.Forsyth 	IDIVL,
128*37da2899SCharles.Forsyth 	IMODL,
129*37da2899SCharles.Forsyth 	IMULL,
130*37da2899SCharles.Forsyth 	IANDL,
131*37da2899SCharles.Forsyth 	IORL,
132*37da2899SCharles.Forsyth 	IXORL,
133*37da2899SCharles.Forsyth 	ISHLL,
134*37da2899SCharles.Forsyth 	ISHRL,
135*37da2899SCharles.Forsyth 	IBNEL,
136*37da2899SCharles.Forsyth 	IBLTL,
137*37da2899SCharles.Forsyth 	IBLEL,
138*37da2899SCharles.Forsyth 	IBGTL,
139*37da2899SCharles.Forsyth 	IBGEL,
140*37da2899SCharles.Forsyth 	IBEQL,
141*37da2899SCharles.Forsyth 	ICVTLF,
142*37da2899SCharles.Forsyth 	ICVTFL,
143*37da2899SCharles.Forsyth 	ICVTLW,
144*37da2899SCharles.Forsyth 	ICVTWL,
145*37da2899SCharles.Forsyth 	ICVTLC,
146*37da2899SCharles.Forsyth 	ICVTCL,
147*37da2899SCharles.Forsyth 	IHEADL,
148*37da2899SCharles.Forsyth 	ICONSL,
149*37da2899SCharles.Forsyth 	INEWCL,
150*37da2899SCharles.Forsyth 	ICASEC,
151*37da2899SCharles.Forsyth 	IINDL,
152*37da2899SCharles.Forsyth 	IMOVPC,
153*37da2899SCharles.Forsyth 	ITCMP,
154*37da2899SCharles.Forsyth 	IMNEWZ,
155*37da2899SCharles.Forsyth 	ICVTRF,
156*37da2899SCharles.Forsyth 	ICVTFR,
157*37da2899SCharles.Forsyth 	ICVTWS,
158*37da2899SCharles.Forsyth 	ICVTSW,
159*37da2899SCharles.Forsyth 	ILSRW,
160*37da2899SCharles.Forsyth 	ILSRL,
161*37da2899SCharles.Forsyth 	IECLR,
162*37da2899SCharles.Forsyth 	INEWZ,
163*37da2899SCharles.Forsyth 	INEWAZ,
164*37da2899SCharles.Forsyth 	IRAISE,
165*37da2899SCharles.Forsyth 	ICASEL,
166*37da2899SCharles.Forsyth 	IMULX,
167*37da2899SCharles.Forsyth 	IDIVX,
168*37da2899SCharles.Forsyth 	ICVTXX,
169*37da2899SCharles.Forsyth 	IMULX0,
170*37da2899SCharles.Forsyth 	IDIVX0,
171*37da2899SCharles.Forsyth 	ICVTXX0,
172*37da2899SCharles.Forsyth 	IMULX1,
173*37da2899SCharles.Forsyth 	IDIVX1,
174*37da2899SCharles.Forsyth 	ICVTXX1,
175*37da2899SCharles.Forsyth 	ICVTFX,
176*37da2899SCharles.Forsyth 	ICVTXF,
177*37da2899SCharles.Forsyth 	IEXPW,
178*37da2899SCharles.Forsyth 	IEXPL,
179*37da2899SCharles.Forsyth 	IEXPF,
180*37da2899SCharles.Forsyth 	ISELF,
181*37da2899SCharles.Forsyth 	/* Fix MAXDIS if you add opcodes */
182*37da2899SCharles.Forsyth };
183*37da2899SCharles.Forsyth 
184*37da2899SCharles.Forsyth enum
185*37da2899SCharles.Forsyth {
186*37da2899SCharles.Forsyth 	MAXDIS	= ISELF+1,
187*37da2899SCharles.Forsyth 
188*37da2899SCharles.Forsyth 	XMAGIC	= 819248,	/* Normal magic */
189*37da2899SCharles.Forsyth 	SMAGIC	= 923426,	/* Signed module */
190*37da2899SCharles.Forsyth 
191*37da2899SCharles.Forsyth 	AMP	= 0x00,		/* Src/Dst op addressing */
192*37da2899SCharles.Forsyth 	AFP	= 0x01,
193*37da2899SCharles.Forsyth 	AIMM	= 0x02,
194*37da2899SCharles.Forsyth 	AXXX	= 0x03,
195*37da2899SCharles.Forsyth 	AIND	= 0x04,
196*37da2899SCharles.Forsyth 	AMASK	= 0x07,
197*37da2899SCharles.Forsyth 	AOFF	= 0x08,
198*37da2899SCharles.Forsyth 	AVAL	= 0x10,
199*37da2899SCharles.Forsyth 
200*37da2899SCharles.Forsyth 	ARM	= 0xC0,		/* Middle op addressing */
201*37da2899SCharles.Forsyth 	AXNON	= 0x00,
202*37da2899SCharles.Forsyth 	AXIMM	= 0x40,
203*37da2899SCharles.Forsyth 	AXINF	= 0x80,
204*37da2899SCharles.Forsyth 	AXINM	= 0xC0,
205*37da2899SCharles.Forsyth 
206*37da2899SCharles.Forsyth 	DEFZ	= 0,
207*37da2899SCharles.Forsyth 	DEFB	= 1,		/* Byte */
208*37da2899SCharles.Forsyth 	DEFW	= 2,		/* Word */
209*37da2899SCharles.Forsyth 	DEFS	= 3,		/* Utf-string */
210*37da2899SCharles.Forsyth 	DEFF	= 4,		/* Real value */
211*37da2899SCharles.Forsyth 	DEFA	= 5,		/* Array */
212*37da2899SCharles.Forsyth 	DIND	= 6,		/* Set index */
213*37da2899SCharles.Forsyth 	DAPOP	= 7,		/* Restore address register */
214*37da2899SCharles.Forsyth 	DEFL	= 8,		/* BIG */
215*37da2899SCharles.Forsyth 	DEFSS = 9,	/* String share - not used yet */
216*37da2899SCharles.Forsyth 
217*37da2899SCharles.Forsyth 	DADEPTH = 4,		/* Array address stack size */
218*37da2899SCharles.Forsyth 
219*37da2899SCharles.Forsyth 	REGLINK	= 0,
220*37da2899SCharles.Forsyth 	REGFRAME= 1,
221*37da2899SCharles.Forsyth 	REGMOD	= 2,
222*37da2899SCharles.Forsyth 	REGTYP	= 3,
223*37da2899SCharles.Forsyth 	REGRET	= 4,
224*37da2899SCharles.Forsyth 	NREG	= 5,
225*37da2899SCharles.Forsyth 
226*37da2899SCharles.Forsyth 	IBY2WD	= 4,
227*37da2899SCharles.Forsyth 	IBY2FT	= 8,
228*37da2899SCharles.Forsyth 	IBY2LG	= 8,
229*37da2899SCharles.Forsyth 
230*37da2899SCharles.Forsyth 	MUSTCOMPILE	= (1<<0),
231*37da2899SCharles.Forsyth 	DONTCOMPILE	= (1<<1),
232*37da2899SCharles.Forsyth 	SHAREMP		= (1<<2),
233*37da2899SCharles.Forsyth 	DYNMOD		= (1<<3),
234*37da2899SCharles.Forsyth 	HASLDT0	= (1<<4),
235*37da2899SCharles.Forsyth 	HASEXCEPT	= (1<<5),
236*37da2899SCharles.Forsyth 	HASLDT	= (1<<6),
237*37da2899SCharles.Forsyth };
238*37da2899SCharles.Forsyth 
239*37da2899SCharles.Forsyth #define DTYPE(x)	(x>>4)
240*37da2899SCharles.Forsyth #define DBYTE(x, l)	((x<<4)|l)
241*37da2899SCharles.Forsyth #define DMAX		(1<<4)
242*37da2899SCharles.Forsyth #define DLEN(x)		(x& (DMAX-1))
243*37da2899SCharles.Forsyth 
244*37da2899SCharles.Forsyth #define SRC(x)		((x)<<3)
245*37da2899SCharles.Forsyth #define DST(x)		((x)<<0)
246*37da2899SCharles.Forsyth #define USRC(x)		(((x)>>3)&AMASK)
247*37da2899SCharles.Forsyth #define UDST(x)		((x)&AMASK)
248*37da2899SCharles.Forsyth #define UXSRC(x)	((x)&(AMASK<<3))
249*37da2899SCharles.Forsyth #define UXDST(x)	((x)&(AMASK<<0))
250