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