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