xref: /original-bsd/old/as.tahoe/instrs (revision e59fb703)
1##
2##	Copyright (c) 1982 Regents of the University of California
3##	@(#)instrs 4.9 6/30/83
4##
5##	Robert R. Henry
6##	University of California, Berkeley
7##	Berkeley, CA
8##	February 6, 1982
9##
10##	Updated 19 May 83 to include the page number in the
11##	architecture reference manual (1981 edition) the instruction
12##	is documented on, and to enumerate the instructions in the same
13##	order as the reference manual does.
14##
15##	THIS FILE IS BOTH AN AWK SCRIPT AND THE DATA
16##
17##	Instruction definitions for the TAHOE
18##
19##	This file is processed by an awk script, viz:
20##	(echo "FLAVOR AS"; cat instrs) | awk -f instrs > as.instrs
21##	(echo "FLAVOR ADB"; cat instrs) | awk -f instrs > as.instrs
22##	(echo "FLAVOR SDB"; cat instrs) | awk -f instrs > as.instrs
23##	(echo "FLAVOR C2"; cat instrs) | awk -f instrs > c2.instrs
24##
25##	The data in this file is shared between:
26##	as	assembler
27##	c2	optimizer
28##	adb	debugger
29##	sdb	symbolic debugger
30##
31##	The awk script reads itself, and produces macros understood
32##	by the appropriate consumer. The awk script determines how
33##	to interpret the file by looking for a line of the form:
34##	FLAVOR	AS
35##	FLAVOR	ADB		(same as AS, but without pseudo instructions)
36##	FLAVOR	SDB		(same as ADB)
37##	FLAVOR	C2		(radically different format for instructions)
38##	and proceeding accordingly.  This line should be prepended to
39##	the front of this file.
40##
41##	Lines starting with # are always comments to awk
42##	Lines starting with ## are always comments
43##	Lines starting with a single # are data lines, to be output.
44##
45##	Empty lines are passed through
46##
47##	field	user(s)		what
48##
49##	$2	awk		#: comment to awk
50##
51##	$3	as, c2, adb	instruction name
52##
53##	$4	c2		instruction class
54##	$5	c2		instruction sub class
55##				HARD, TN1, TNX2, OP
56##
57##	$6	as, adb		opcode byte
58##
59##	$7	as, adb		number of arguments
60##	$8	as, adb		1st operand: access A,R,W,M,I,B
61##	$9	as, adb		1st operand: type, BWLQOFDGH
62##
63##	$10	as, adb		2nd operand: access
64##		...
65##
66##
67##	These are the definitions used in this file:
68##	instruction class (c2)
69##		understood only by c2.  If it is HARD, the second field
70##		is ignored.
71##	instruction subclass: (c2)
72##		HARD		paired with the class
73##		S		single valued attribute to C2
74##		TN1		class + type of 1st operand
75##		TNX2		class + type of 1st and 2nd operand
76##		OP		class + type of 1st operand and # of args
77##		default		class + subclass
78##
79##
80##	code byte
81##	number of arguments
82##	Access type
83##		A		for address, only in memory
84##		W		for writing
85##		R		for reading
86##		M		for modifying
87##		B		for branch displacement
88##	Data types
89##		B	byte
90##		W	word
91##		L	long
92##		Q	quad
93##		F	f_float
94##		D	d_float
95##
96##	The order of instructions in this table is not critical;
97##	the clients take care of their own table construction and ordering.
98##	The instructions are grouped (more or less) into functional groups.
99##
100##	The following is the awk program to interpret this table.
101
102BEGIN{
103	flavor = AS;
104	##
105	##	magic padding before the string for AS
106	##	4 bytes of 0's: seek position of the string
107	##	2 bytes, value 2, indicating core resident
108	##	2 bytes, value 0, length
109	##
110	ASpad = "\\0\\0\\0\\0" "\\2\\0";
111}
112{
113	if (NF == 0){
114		printf("\n");
115		next;
116	}
117	if ($1 == "FLAVOR"){
118		flavor = $2;
119		if (flavor == "SDB"){
120			flavor = "ADB";
121		}
122		next;
123	}
124	if ($1 != "#"){
125		next;
126	}
127
128	if ($6 == "MACR"){
129		if (flavor == "ADB"){
130			next;
131		}
132		if (flavor == "AS"){
133			if ($4 == "CBR")
134				$4 = "IJXXX";
135			printf("PSEUDO(\"%s\\0%o\\0%s\",", ASpad,length($3),$3);
136			printf("%s, %s),\n", $7, $4);
137			next;
138		}
139		if (flavor == "C2"){
140			if ($5 == "C2X")
141				next;
142			printf("\"%s\",", $3);
143			if ($4 == "CBR" && $5 != "JBR"){
144				printf("T(CBR,%s),\n", $5);
145			} else {
146				printf("%s,\n", $5);
147			}
148			next;
149		}
150	}
151
152	if (flavor == "C2"){
153		printf("\"%s\",", $3);
154		if ($4 == "HARD"){		# 0 value
155			printf("0,\n");
156			next;
157		}
158		if ($5 == "S"){			# single value
159			printf("%s,\n", $4);
160			next;
161		}
162		if ($5 == "TN1"){		# use type of 1st operand
163			printf("T(%s,TYP%s),\n", $4, $10);
164			next;
165		}
166		if ($5 == "TNX2"){		# cross product of 1st and 2nd operand
167			printf("T(%s,U(TYP%s,TYP%s)),\n", $4, $10, $12);
168			next;
169		}
170		if ($5 == "OP"){		# arithmetic operator
171			printf("T(%s,U(TYP%s,OP%d)),\n", $4, $10, $8);
172			next;
173		}
174		printf("T(%s,%s),\n", $4, $5);	# special value
175		next;
176	}
177	if (flavor == "AS"){
178		printf("OP(\"%s\\0%o\\0%s\", ", ASpad, length($3), $3);
179		printf("%s, %d", $6, $7);
180	} else {
181		printf("OP(\"%s\", %s, %d", $3, $6, $7);
182	}
183	if (flavor == "AS" || flavor == "ADB"){
184		for (i = 8; i+1 <= NF; i = i + 2){
185			printf(", A_%s%s", $i, $(i+1));
186		}
187		for (i = $7; i < 6; i++){
188			printf(",0");
189		}
190		printf("),\n");
191	}
192}
193##
194##-------------------------------------------------------
195##1 2		3     4  	5    6	        7  8 9
196##
197##
198## PSEUDO (MACR) operators come first
199
200## Data initializers
201
202# 000a .byte	IBYTE	C2X	MACR 0		VAR
203# 000b .word	IWORD	WGEN	MACR 0		VAR
204# 000c .int	IINT	LGEN	MACR 0		VAR
205# 000d .long	ILONG	LGEN	MACR 0		VAR
206# 000a .quad	IQUAD	C2X	MACR 0		VAR
207# 000a .float	IFFLOAT	C2X	MACR 0		VAR
208# 000a .double	IDFLOAT	C2X	MACR 0		VAR
209# 000a .ffloat	IFFLOAT	C2X	MACR 0		VAR
210# 000a .dfloat	IDFLOAT	C2X	MACR 0		VAR
211# 000a .space	ISPACE	C2X	MACR 0		1
212# 000a .fill	IFILL	C2X	MACR 0		2
213# 000a .ascii	IASCII	C2X	MACR 0		VAR
214# 000a .asciz	IASCIZ	C2X	MACR 0		VAR
215
216# 000a .data	IDATA	DATA	MACR 0		1
217# 000a .text	ITEXT	TEXT	MACR 0		1
218# 000a .align	IALIGN	ALIGN	MACR 0		1
219
220# 000a .line	ILINENO	C2X	MACR 0		1
221# 000a .file	IFILE	C2X	MACR 0		1
222
223# 000a .globl	IGLOBAL	EROU	MACR 0		1
224# 000a .comm	ICOMM	COMM	MACR 0		2
225# 000a .lcomm	ILCOMM	LCOMM	MACR 0		2
226# 000a .set	ISET	SET	MACR 0		2
227# 000a .lsym	ILSYM	C2X	MACR 0		2
228# 000a .org	IORG	C2X	MACR 0		1
229
230# 000a .stab	ISTAB	C2X	MACR 0		6
231# 000a .stabd	ISTABDOT	C2X	MACR 0	3
232# 000a .stabn	ISTABNONE	C2X	MACR 0	3
233# 000a .stabs	ISTABSTR	C2X	MACR 0	3
234
235# 000a .ABORT	IABORT	C2X	MACR 0		0
236
237## Pseudo jumps
238
239# 000a jbc	CBR	JBC	MACR 0x1e	1	B B
240# 000a jbs	CBR	JBS	MACR 0x0e	1	B B
241
242# 000a jbr	CBR	JBR	MACR 0x11	1	B B
243# 000a jcc	CBR	C2X	MACR 0xf1	1	B B
244# 000a jcs	CBR	C2X	MACR 0xe1	1	B B
245# 000a jvc	CBR	C2X	MACR 0xc1	1	B B
246# 000a jvs	CBR	C2X	MACR 0xd1	1	B B
247# 000a jlss	CBR	JLT	MACR 0x91	1	B B
248# 000a jlssu	CBR	JLO	MACR 0xf1	1	B B
249# 000a jleq	CBR	JLE	MACR 0x51	1	B B
250# 000a jlequ	CBR	JLOS	MACR 0xb1	1	B B
251# 000a jeql	CBR	JEQ	MACR 0x31	1	B B
252# 000a jeqlu	CBR	JEQ	MACR 0x31	1	B B
253# 000a jneq	CBR	JNE	MACR 0x21	1	B B
254# 000a jnequ	CBR	JNE	MACR 0x21	1	B B
255# 000a jgeq	CBR	JGE	MACR 0x81	1	B B
256# 000a jgequ	CBR	JHIS	MACR 0xe1	1	B B
257# 000a jgtr	CBR	JGT	MACR 0x41	1	B B
258# 000a jgtru	CBR	JHI	MACR 0xa1	1	B B
259##
260## Registers
261##
262# 000a r0	REG	C2X	MACR 0		0
263# 000a r1	REG	C2X	MACR 1		0
264# 000a r2	REG	C2X	MACR 2		0
265# 000a r3	REG	C2X	MACR 3		0
266# 000a r4	REG	C2X	MACR 4		0
267# 000a r5	REG	C2X	MACR 5		0
268# 000a r6	REG	C2X	MACR 6		0
269# 000a r7	REG	C2X	MACR 7		0
270# 000a r8	REG	C2X	MACR 8		0
271# 000a r9	REG	C2X	MACR 9		0
272# 000a r10	REG	C2X	MACR 10		0
273# 000a r11	REG	C2X	MACR 11		0
274# 000a r12	REG	C2X	MACR 12		0
275# 000a r13	REG	C2X	MACR 13		0
276# 000a r14	REG	C2X	MACR 14		0
277# 000a r15	REG	C2X	MACR 15		0
278# 000a fp	REG	C2X	MACR 13		0
279# 000a sp	REG	C2X	MACR 14		0
280# 000a pc	REG	C2X	MACR 15		0
281
282## Normal instructions
283
284# 158a kcall	HARD HARD 0xcf	1  R W
285# 160a prober	PROBER TN1 0xc0	3  R B  A B  R L
286# 160a probew	PROBEW TN1 0xd0	3  R B  A B  R L
287# 161a rei	HARD HARD 0x20	0
288# 163a ldpctx	HARD HARD 0x60	0
289# 163b svpctx	HARD HARD 0x70	0
290# 165a mtpr	MTPR TN1 0xad	2  R L  R L
291# 165b mfpr	MFPR TN1 0xbd	2  R L  W L
292# 169a bpt	HARD HARD 0x30	0
293# 171a halt	HARD HARD 0x00	0
294# 175a movb	MOV TN1	 0x09	2  R B  W B
295# 175b movw	MOV TN1	 0x0b	2  R W  W W
296# 175c movl	MOV TN1	 0x0d	2  R L  W L
297# 175d movblk	HARD HARD 0xf8	0
298# 177a movob	HARD HARD 0xc9	2  R B  W B
299# 177b movow	HARD HARD 0xcb	2  R W  W W
300# 180a pushb	PUSH TN1 0xd9	1  R B
301# 180b pushw	PUSH TN1 0xdb	1  R W
302# 180a pushl	PUSH TN1 0xdd	1  R L
303# 180d pushd	HARD HARD 0x67	0
304# 181a clrb	CLR TN1	 0x49	1  W B
305# 181b clrw	CLR TN1	 0x4b	1  W W
306# 181c clrl	CLR TN1	 0x4d	1  W L
307# 182a mnegb	NEG TN1	 0xe8	2  R B  W B
308# 182b mnegw	NEG TN1	 0xea	2  R W  W W
309# 182c mnegl	NEG TN1	 0xec	2  R L  W L
310# 182d negf	HARD HARD 0xb6	0
311# 182e negd	HARD HARD 0xb7	0
312# 183a mcomb	COM TN1	 0x29	2  R B  W B
313# 183b mcomw	COM TN1	 0x2b	2  R W  W W
314# 183c mcoml	COM TN1	 0x2d	2  R L  W L
315# 184A cvtbw	CVT TNX2 0x99	2  R B  W W
316# 184B cvtbl	CVT TNX2 0x89	2  R B  W L
317# 184C cvtwb	CVT TNX2 0x33	2  R W  W B
318# 184D cvtwl	CVT TNX2 0x23	2  R W  W L
319# 184E cvtlb	CVT TNX2 0x6f	2  R L  W B
320# 184F cvtlw	CVT TNX2 0x7f	2  R L  W W
321# 184a cvfl	CVT TN1	 0x86	1  W L
322# 184b cvdl	CVT TN1	 0x87	1  W L
323# 184c cvlf	CVT TN1	 0x76	1  R L
324# 184d cvld	CVT TN1	 0x77	1  R L
325# 184e cvdf	HARD HARD 0xa6	0
326# 187a movzbw	MOVZ TNX2 0xb9	2  R B  W W
327# 187b movzbl	MOVZ TNX2 0xa9	2  R B  W L
328# 187c movzwl	MOVZ TNX2 0xc3	2  R W  W L
329# 188a cmpb	CMP TN1	 0x19	2  R B  R B
330# 188b cmpw	CMP TN1	 0x1b	2  R W  R W
331# 188c cmpl	CMP TN1	 0x1d	2  R L  R L
332# 188d cmpf	CMP TN1	 0x36	1  R F
333# 188e cmpf2	CMP TN1	 0x46	2  R F  R F
334# 188f cmpd	CMP TN1	 0x37	1  R D
335# 188g cmpd2	CMP TN1	 0x47	2  R D  R D
336# 189a incb	INC TN1	 0x69	1  M B
337# 189b incw	INC TN1	 0x6b	1  M W
338# 189c incl	INC TN1	 0x6d	1  M L
339# 190a tstb	TST TN1	 0x59	1  R B
340# 190b tstw	TST TN1	 0x5b	1  R W
341# 190c tstl	TST TN1	 0x5d	1  R L
342# 190d tstf	HARD HARD 0x56	0
343# 190e tstd	HARD HARD 0x57	0
344# 191a addb2	ADD OP	 0x08	2  R B  M B
345# 191b addb3	ADD OP	 0x18	3  R B  R B  W B
346# 191c addw2	ADD OP	 0x0a	2  R W  M W
347# 191d addw3	ADD OP	 0x1a	3  R W  R W  W W
348# 191e addl2	ADD OP	 0x0c	2  R L  M L
349# 191f addl3	ADD OP	 0x1c	3  R L  R L  W L
350# 191g addf	ADD OP	 0xc6	1  R F
351# 191h addd	ADD OP	 0xc7	1  R D
352# 191i adda	ADD OP	 0x8e	2  R L  M L
353# 193a adwc	HARD HARD 0x8d	2  R L  M L
354# 194a andb2	AND OP	 0xa8	2  R B  M B
355# 194b andb3	AND OP	 0xb8	3  R B  R B  W B
356# 194c andw2	AND OP	 0xaa	2  R W  M W
357# 194d andw3	AND OP	 0xba	3  R W  R W  W W
358# 194e andl2	AND OP	 0xac	2  R L  M L
359# 194f andl3	AND OP	 0xbc	3  R L  R L  W L
360# 195c subb2	SUB OP	 0x28	2  R B  M B
361# 195d subb3	SUB OP	 0x38	3  R B  R B  W B
362# 195e subw2	SUB OP	 0x2a	2  R W  M W
363# 195f subw3	SUB OP	 0x3a	3  R W  R W  W W
364# 195g subl2	SUB OP	 0x2c	2  R L  M L
365# 195h subl3	SUB OP	 0x3c	3  R L  R L  W L
366# 195i subf	SUB OP	 0xd6	1  R F
367# 195j subd	SUB OP	 0xd7	1  R D
368# 195k suba	SUB OP	 0x9e	2  R L  M L
369# 197a decb	DEC TN1	 0x79	1  M B
370# 197b decw	DEC TN1	 0x7b	1  M W
371# 197c decl	DEC TN1	 0x7d	1  M L
372# 198a sbwc	HARD HARD 0x9d	2  R L  M L
373# 199a mull2	MUL OP	 0x4c	2  R L  M L
374# 199b mull3	MUL OP	 0x5c	3  R L  R L  W L
375# 199c mulf	MUL OP	 0xe6	1  R F
376# 199d muld	MUL OP	 0xe7	1  R D
377# 201a emul	HARD HARD 0x2e	4  R L  R L  R L  W Q
378# 204a divl2	DIV OP	 0x6c	2  R L  M L
379# 204b divl3	DIV OP	 0x7c	3  R L  R L  W L
380# 204c divf	DIV OP	 0xf6	1  R F
381# 204d divd	DIV OP	 0xf7	1  R D
382# 205a ediv	HARD HARD 0x3e	4  R L  R Q  W L  W L
383# 207a bitb	BIT TN1	 0x39	2  R B  R B
384# 207b bitw	BIT TN1	 0x3b	2  R W  R W
385# 207c bitl	BIT TN1	 0x3d	2  R L  R L
386# 208a ldf	HARD HARD 0x06	1  R F
387# 208b ldd	HARD HARD 0x07	1  R D
388# 208c ldfd	HARD HARD 0x97	1  R F
389# 208d lnf	HARD HARD 0x16	1  R F
390# 208e lnd	HARD HARD 0x17	1  R D
391# 208f stf	HARD HARD 0x26	1  W F
392# 208g std	HARD HARD 0x27	1  W D
393# 209a orb2	OR OP	 0x88	2  R B  M B
394# 209b orb3	OR OP	 0x98	3  R B  R B  W B
395# 209c orw2	OR OP	 0x8a	2  R W  M W
396# 209d orw3	OR OP	 0x9a	3  R W  R W  W W
397# 209e orl2	OR OP	 0x8c	2  R L  M L
398# 209f orl3	OR OP	 0x9c	3  R L  R L  W L
399# 210a xorb2	XOR OP	 0xc8	2  R B  M B
400# 210b xorb3	XOR OP	 0xd8	3  R B  R B  W B
401# 210c xorw2	XOR OP	 0xca	2  R W  M W
402# 210d xorw3	XOR OP	 0xda	3  R W  R W  W W
403# 210e xorl2	XOR OP	 0xcc	2  R L  M L
404# 210f xorl3	XOR OP	 0xdc	3  R L  R L  W L
405# 211a shal	HARD HARD 0x4e	3  R B  R L  W L
406# 211b shar	HARD HARD 0x5e	3  R B  R L  W L
407# 212a shll	HARD HARD 0x48	3  R B  R L  W L
408# 212b shlq	HARD HARD 0x4a	3  R B  R Q  W Q
409# 212c shrl	HARD HARD 0x58	3  R B  R L  W L
410# 212c shrq	HARD HARD 0x5a	3  R B  R Q  W Q
411# 220a storer	HARD HARD 0xbb	2  R W  A L
412# 221a loadr	HARD HARD 0xab	2  R W  A L
413# 222a movpsl	HARD HARD 0xcd	1  W L
414# 223a bispsw	HARD HARD 0x8b	1  R W
415# 223b bicpsw	HARD HARD 0x9b	1  R W
416# 224a movab	MOVA TN1 0xe9	2  A B  W L
417# 224a pushab	PUSHA TN1 0xf9	1  A B
418# 224b movaw	MOVA TN1 0xeb	2  A W  W L
419# 224b pushaw	PUSHA TN1 0xfb	1  A W
420# 224c moval	MOVA TN1 0xed	2  A L  W L
421# 224c pushal	PUSHA TN1 0xfd	1  A L
422# 232a insque	HARD HARD 0xe0	2  A L  A L
423# 234a remque	HARD HARD 0xf0	1  A L
424# 251a ffc	HARD HARD 0xbe	2  R L  W L
425# 251b ffs	HARD HARD 0xae	2  R L  W L
426# 261a bneq	CBR JNE	 0x21	1  B B
427# 261b bnequ	CBR JNE	 0x21	1  B B
428# 261c beql	CBR JEQ	 0x31	1  B B
429# 261d beqlu	CBR JEQ	 0x31	1  B B
430# 261e bgtr	CBR JGT	 0x41	1  B B
431# 261f bleq	CBR JLE	 0x51	1  B B
432# 261g bgeq	CBR JGE	 0x81	1  B B
433# 261h blss	CBR JLT	 0x91	1  B B
434# 261i bgtru	CBR JHI	 0xa1	1  B B
435# 261j blequ	CBR JLOS 0xb1	1  B B
436# 261k bvc	CBR 0	 0xc1	1  B B
437# 261l bvs	CBR 0	 0xd1	1  B B
438# 261m bgequ	CBR JHIS 0xe1	1  B B
439# 261n bcc	CBR JHIS 0xf1	1  B B
440# 261o blssu	CBR JLO	 0xf1	1  B B
441# 261p bcs	CBR JLO	 0xe1	1  B B
442# 261q btcs	CBR 0	 0xce	1  R B
443# 263a brb	JBR S	 0x11	1  B B
444# 263b brw	JBR S	 0x13	1  B W
445# 263c jmp	JMP S	 0x71	1  A B
446# 264a bbs	CBR JBS	 0x0e	3  R L  R L  B W
447# 264b bbc	CBR JBC	 0x1e	3  R L  R L  B W
448# 266a bbssi	CBR JBSS 0x5f	3  R L  M L  B W
449# 270a aoblss	AOBLSS S 0x2f	3  R L  M L  B W
450# 270b aobleq	AOBLEQ S 0x3f	3  R L  M L  B W
451# 273a casel	CASE TN1 0xfc	3  R L  R L  R L
452# 282a calls	CALL S	 0xbf	2  R B  A B
453# 282b callf	CALL S	 0xfe	2  R B  A B
454# 284a ret	JBR RET	 0x40	0
455# 288a movs2	HARD HARD 0x82	0
456# 288b movs3	HARD HARD 0xc2	0
457# 294a cmps2	HARD HARD 0x92	0
458# 294b cmps3	HARD HARD 0xd2	0
459# 300a sinf	HARD HARD 0x05	0
460# 300b cosf	HARD HARD 0x15	0
461# 300c atanf	HARD HARD 0x25	0
462# 300d logf	HARD HARD 0x35	0
463# 300e sqrtf	HARD HARD 0x45	0
464# 300f expf	HARD HARD 0x55	0
465# 385a nop	HARD HARD 0x10	0
466