xref: /inferno-os/module/dis.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1Dis: module
2{
3	PATH:	con "/dis/lib/dis.dis";
4
5	XMAGIC:		con	819248;
6	SMAGIC:		con	923426;
7	MUSTCOMPILE:	con	1<<0;
8	DONTCOMPILE:	con 	1<<1;
9	SHAREMP:	con 	1<<2;
10	DYNMOD:	con	1<<3;
11	HASLDT0:	con	1<<4;
12	HASEXCEPT:	con	1<<5;
13	HASLDT:	con	1<<6;
14
15	AMP:	con 16r00;	# Src/Dst op addressing
16	AFP:	con 16r01;
17	AIMM:	con 16r02;
18	AXXX:	con 16r03;
19	AIND:	con 16r04;
20	AMASK:	con 16r07;
21
22	ARM:	con 16rC0;	# Middle op addressing
23	AXNON:	con 16r00;
24	AXIMM:	con 16r40;
25	AXINF:	con 16r80;
26	AXINM:	con 16rC0;
27
28	DEFZ:	con 0;
29	DEFB:	con 1;		# Byte
30	DEFW:	con 2;		# Word
31	DEFS:	con 3;		# Utf-string
32	DEFF:	con 4;		# Real value
33	DEFA:	con 5;		# Array
34	DIND:	con 6;		# Set index
35	DAPOP:	con 7;		# Restore address register
36	DEFL:	con 8;		# BIG
37	DMAX:	con 1<<4;
38
39	Inst: adt
40	{
41		op:	int;
42		addr:	int;
43		mid:	int;
44		src:	int;
45		dst:	int;
46	};
47
48	Type: adt
49	{
50		size:	int;
51		np:	int;
52		map:	array of byte;
53	};
54
55	Data: adt
56	{
57		op:	int;		# encoded op
58		n:	int;		# number of elements
59		off:	int;		# byte offset in data space
60		pick {
61		Zero =>		# DEFZ
62		Bytes =>		# DEFB
63			bytes:	array of byte;
64		Words =>		# DEFW
65			words:	array of int;
66		String =>		# DEFS
67			str:	string;
68		Reals =>		# DEFF
69			reals:	array of real;
70		Array =>		# DEFA
71			typex:	int;
72			length:	int;
73		Aindex =>		# DIND
74			index:	int;
75		Arestore =>	# DAPOP
76		Bigs =>		# DEFL
77			bigs:		array of big;
78		}
79	};
80
81	Link: adt
82	{
83		pc:	int;
84		desc:	int;
85		sig:	int;
86		name:	string;
87	};
88
89	Import: adt
90	{
91		sig:	int;
92		name:	string;
93	};
94
95	Except: adt
96	{
97		s:	string;
98		pc:	int;
99	};
100
101	Handler: adt
102	{
103		pc1:	int;
104		pc2:	int;
105		eoff:	int;
106		ne:	int;
107		t:	ref Type;
108		etab:	array of ref Except;
109	};
110
111	Mod: adt
112	{
113		name:	string;
114		srcpath:	string;
115
116		magic:	int;
117		rt:	int;
118		ssize:	int;
119		isize:	int;
120		dsize:	int;
121		tsize:	int;
122		lsize:	int;
123		entry:	int;
124		entryt:	int;
125
126		inst:	array of ref Inst;
127		types:	array of ref Type;
128		data:	list of ref Data;
129		links:	array of ref Link;
130		imports:	array of array of ref Import;
131		handlers:	array of ref Handler;
132
133		sign:	array of byte;
134	};
135
136	INOP,
137	IALT,
138	INBALT,
139	IGOTO,
140	ICALL,
141	IFRAME,
142	ISPAWN,
143	IRUNT,
144	ILOAD,
145	IMCALL,
146	IMSPAWN,
147	IMFRAME,
148	IRET,
149	IJMP,
150	ICASE,
151	IEXIT,
152	INEW,
153	INEWA,
154	INEWCB,
155	INEWCW,
156	INEWCF,
157	INEWCP,
158	INEWCM,
159	INEWCMP,
160	ISEND,
161	IRECV,
162	ICONSB,
163	ICONSW,
164	ICONSP,
165	ICONSF,
166	ICONSM,
167	ICONSMP,
168	IHEADB,
169	IHEADW,
170	IHEADP,
171	IHEADF,
172	IHEADM,
173	IHEADMP,
174	ITAIL,
175	ILEA,
176	IINDX,
177	IMOVP,
178	IMOVM,
179	IMOVMP,
180	IMOVB,
181	IMOVW,
182	IMOVF,
183	ICVTBW,
184	ICVTWB,
185	ICVTFW,
186	ICVTWF,
187	ICVTCA,
188	ICVTAC,
189	ICVTWC,
190	ICVTCW,
191	ICVTFC,
192	ICVTCF,
193	IADDB,
194	IADDW,
195	IADDF,
196	ISUBB,
197	ISUBW,
198	ISUBF,
199	IMULB,
200	IMULW,
201	IMULF,
202	IDIVB,
203	IDIVW,
204	IDIVF,
205	IMODW,
206	IMODB,
207	IANDB,
208	IANDW,
209	IORB,
210	IORW,
211	IXORB,
212	IXORW,
213	ISHLB,
214	ISHLW,
215	ISHRB,
216	ISHRW,
217	IINSC,
218	IINDC,
219	IADDC,
220	ILENC,
221	ILENA,
222	ILENL,
223	IBEQB,
224	IBNEB,
225	IBLTB,
226	IBLEB,
227	IBGTB,
228	IBGEB,
229	IBEQW,
230	IBNEW,
231	IBLTW,
232	IBLEW,
233	IBGTW,
234	IBGEW,
235	IBEQF,
236	IBNEF,
237	IBLTF,
238	IBLEF,
239	IBGTF,
240	IBGEF,
241	IBEQC,
242	IBNEC,
243	IBLTC,
244	IBLEC,
245	IBGTC,
246	IBGEC,
247	ISLICEA,
248	ISLICELA,
249	ISLICEC,
250	IINDW,
251	IINDF,
252	IINDB,
253	INEGF,
254	IMOVL,
255	IADDL,
256	ISUBL,
257	IDIVL,
258	IMODL,
259	IMULL,
260	IANDL,
261	IORL,
262	IXORL,
263	ISHLL,
264	ISHRL,
265	IBNEL,
266	IBLTL,
267	IBLEL,
268	IBGTL,
269	IBGEL,
270	IBEQL,
271	ICVTLF,
272	ICVTFL,
273	ICVTLW,
274	ICVTWL,
275	ICVTLC,
276	ICVTCL,
277	IHEADL,
278	ICONSL,
279	INEWCL,
280	ICASEC,
281	IINDL,
282	IMOVPC,
283	ITCMP,
284	IMNEWZ,
285	ICVTRF,
286	ICVTFR,
287	ICVTWS,
288	ICVTSW,
289	ILSRW,
290	ILSRL,
291	IECLR,
292	INEWZ,
293	INEWAZ,
294	IRAISE,
295	ICASEL,
296	IMULX,
297	IDIVX,
298	ICVTXX,
299	IMULX0,
300	IDIVX0,
301	ICVTXX0,
302	IMULX1,
303	IDIVX1,
304	ICVTXX1,
305	ICVTFX,
306	ICVTXF,
307	IEXPW,
308	IEXPL,
309	IEXPF,
310	ISELF,
311	# add new instructions here
312	MAXDIS: con iota;
313
314	init:		fn();
315	loadobj:	fn(file: string): (ref Mod, string);
316	op2s:	fn(op: int): string;
317	inst2s:	fn(ins: ref Inst): string;
318	src:		fn(file: string): string;
319};
320#
321# derived by Vita Nuova Limited 1998 from /appl/wm/rt.b and /include/isa.h, both
322# Copyright © 1996-1999 Lucent Technologies Inc.  All rights reserved.
323#
324