4.4BSD/usr/src/old/as.tahoe/instrs

##
##	Copyright (c) 1982 Regents of the University of California
##	@(#)instrs 4.9 6/30/83
##
##	Robert R. Henry
##	University of California, Berkeley
##	Berkeley, CA
##	February 6, 1982
##
##	Updated 19 May 83 to include the page number in the
##	architecture reference manual (1981 edition) the instruction
##	is documented on, and to enumerate the instructions in the same
##	order as the reference manual does.
##
##	THIS FILE IS BOTH AN AWK SCRIPT AND THE DATA
##
##	Instruction definitions for the TAHOE
##
##	This file is processed by an awk script, viz:
##	(echo "FLAVOR AS"; cat instrs) | awk -f instrs > as.instrs
##	(echo "FLAVOR ADB"; cat instrs) | awk -f instrs > as.instrs
##	(echo "FLAVOR SDB"; cat instrs) | awk -f instrs > as.instrs
##	(echo "FLAVOR C2"; cat instrs) | awk -f instrs > c2.instrs
##
##	The data in this file is shared between:
##	as	assembler
##	c2	optimizer
##	adb	debugger
##	sdb	symbolic debugger
##
##	The awk script reads itself, and produces macros understood
##	by the appropriate consumer. The awk script determines how
##	to interpret the file by looking for a line of the form:
##	FLAVOR	AS
##	FLAVOR	ADB		(same as AS, but without pseudo instructions)
##	FLAVOR	SDB		(same as ADB)
##	FLAVOR	C2		(radically different format for instructions)
##	and proceeding accordingly.  This line should be prepended to
##	the front of this file.
##
##	Lines starting with # are always comments to awk
##	Lines starting with ## are always comments
##	Lines starting with a single # are data lines, to be output.
##
##	Empty lines are passed through
##
##	field	user(s)		what
##
##	$2	awk		#: comment to awk
##
##	$3	as, c2, adb	instruction name
##
##	$4	c2		instruction class
##	$5	c2		instruction sub class
##				HARD, TN1, TNX2, OP
##
##	$6	as, adb		opcode byte
##	
##	$7	as, adb		number of arguments
##	$8	as, adb		1st operand: access A,R,W,M,I,B
##	$9	as, adb		1st operand: type, BWLQOFDGH
##
##	$10	as, adb		2nd operand: access
##		...
##
##
##	These are the definitions used in this file:
##	instruction class (c2)
##		understood only by c2.  If it is HARD, the second field
##		is ignored.
##	instruction subclass: (c2)
##		HARD		paired with the class
##		S		single valued attribute to C2
##		TN1		class + type of 1st operand
##		TNX2		class + type of 1st and 2nd operand
##		OP		class + type of 1st operand and # of args
##		default		class + subclass
##
##
##	code byte
##	number of arguments
##	Access type
##		A		for address, only in memory
##		W		for writing
##		R		for reading
##		M		for modifying
##		B		for branch displacement
##	Data types
##		B	byte
##		W	word
##		L	long
##		Q	quad
##		F	f_float
##		D	d_float
##
##	The order of instructions in this table is not critical;
##	the clients take care of their own table construction and ordering.
##	The instructions are grouped (more or less) into functional groups.
##
##	The following is the awk program to interpret this table.

BEGIN{
	flavor = AS;
	##
	##	magic padding before the string for AS
	##	4 bytes of 0's: seek position of the string
	##	2 bytes, value 2, indicating core resident
	##	2 bytes, value 0, length
	##
	ASpad = "\\0\\0\\0\\0" "\\2\\0";
}
{
	if (NF == 0){
		printf("\n");
		next;
	}
	if ($1 == "FLAVOR"){
		flavor = $2;
		if (flavor == "SDB"){
			flavor = "ADB";
		}
		next;
	}
	if ($1 != "#"){
		next;
	}

	if ($6 == "MACR"){
		if (flavor == "ADB"){
			next;
		}
		if (flavor == "AS"){
			if ($4 == "CBR")
				$4 = "IJXXX";
			printf("PSEUDO(\"%s\\0%o\\0%s\",", ASpad,length($3),$3);
			printf("%s, %s),\n", $7, $4);
			next;
		}
		if (flavor == "C2"){
			if ($5 == "C2X")
				next;
			printf("\"%s\",", $3);
			if ($4 == "CBR" && $5 != "JBR"){
				printf("T(CBR,%s),\n", $5);
			} else {
				printf("%s,\n", $5);
			}
			next;
		}
	}

	if (flavor == "C2"){
		printf("\"%s\",", $3);
		if ($4 == "HARD"){		# 0 value
			printf("0,\n");
			next;
		}
		if ($5 == "S"){			# single value
			printf("%s,\n", $4);
			next;
		}
		if ($5 == "TN1"){		# use type of 1st operand
			printf("T(%s,TYP%s),\n", $4, $10);
			next;
		}
		if ($5 == "TNX2"){		# cross product of 1st and 2nd operand
			printf("T(%s,U(TYP%s,TYP%s)),\n", $4, $10, $12);
			next;
		}
		if ($5 == "OP"){		# arithmetic operator
			printf("T(%s,U(TYP%s,OP%d)),\n", $4, $10, $8);
			next;
		}
		printf("T(%s,%s),\n", $4, $5);	# special value
		next;
	}
	if (flavor == "AS"){
		printf("OP(\"%s\\0%o\\0%s\", ", ASpad, length($3), $3);
		printf("%s, %d", $6, $7);
	} else {
		printf("OP(\"%s\", %s, %d", $3, $6, $7);
	}
	if (flavor == "AS" || flavor == "ADB"){
		for (i = 8; i+1 <= NF; i = i + 2){
			printf(", A_%s%s", $i, $(i+1));
		}
		for (i = $7; i < 6; i++){
			printf(",0");
		}
		printf("),\n");
	}
}
##
##-------------------------------------------------------
##1 2		3     4  	5    6	        7  8 9
##
##
## PSEUDO (MACR) operators come first

## Data initializers

# 000a .byte	IBYTE	C2X	MACR 0		VAR
# 000b .word	IWORD	WGEN	MACR 0		VAR
# 000c .int	IINT	LGEN	MACR 0		VAR
# 000d .long	ILONG	LGEN	MACR 0		VAR
# 000a .quad	IQUAD	C2X	MACR 0		VAR
# 000a .float	IFFLOAT	C2X	MACR 0		VAR
# 000a .double	IDFLOAT	C2X	MACR 0		VAR
# 000a .ffloat	IFFLOAT	C2X	MACR 0		VAR
# 000a .dfloat	IDFLOAT	C2X	MACR 0		VAR
# 000a .space	ISPACE	C2X	MACR 0		1
# 000a .fill	IFILL	C2X	MACR 0		2
# 000a .ascii	IASCII	C2X	MACR 0		VAR
# 000a .asciz	IASCIZ	C2X	MACR 0		VAR

# 000a .data	IDATA	DATA	MACR 0		1
# 000a .text	ITEXT	TEXT	MACR 0		1
# 000a .align	IALIGN	ALIGN	MACR 0		1
	
# 000a .line	ILINENO	C2X	MACR 0		1
# 000a .file	IFILE	C2X	MACR 0		1

# 000a .globl	IGLOBAL	EROU	MACR 0		1
# 000a .comm	ICOMM	COMM	MACR 0		2
# 000a .lcomm	ILCOMM	LCOMM	MACR 0		2
# 000a .set	ISET	SET	MACR 0		2
# 000a .lsym	ILSYM	C2X	MACR 0		2
# 000a .org	IORG	C2X	MACR 0		1

# 000a .stab	ISTAB	C2X	MACR 0		6
# 000a .stabd	ISTABDOT	C2X	MACR 0	3
# 000a .stabn	ISTABNONE	C2X	MACR 0	3
# 000a .stabs	ISTABSTR	C2X	MACR 0	3

# 000a .ABORT	IABORT	C2X	MACR 0		0

## Pseudo jumps

# 000a jbc	CBR	JBC	MACR 0x1e	1	B B
# 000a jbs	CBR	JBS	MACR 0x0e	1	B B

# 000a jbr	CBR	JBR	MACR 0x11	1	B B
# 000a jcc	CBR	C2X	MACR 0xf1	1	B B
# 000a jcs	CBR	C2X	MACR 0xe1	1	B B
# 000a jvc	CBR	C2X	MACR 0xc1	1	B B
# 000a jvs	CBR	C2X	MACR 0xd1	1	B B
# 000a jlss	CBR	JLT	MACR 0x91	1	B B
# 000a jlssu	CBR	JLO	MACR 0xf1	1	B B
# 000a jleq	CBR	JLE	MACR 0x51	1	B B
# 000a jlequ	CBR	JLOS	MACR 0xb1	1	B B
# 000a jeql	CBR	JEQ	MACR 0x31	1	B B
# 000a jeqlu	CBR	JEQ	MACR 0x31	1	B B
# 000a jneq	CBR	JNE	MACR 0x21	1	B B
# 000a jnequ	CBR	JNE	MACR 0x21	1	B B
# 000a jgeq	CBR	JGE	MACR 0x81	1	B B
# 000a jgequ	CBR	JHIS	MACR 0xe1	1	B B
# 000a jgtr	CBR	JGT	MACR 0x41	1	B B
# 000a jgtru	CBR	JHI	MACR 0xa1	1	B B
##
## Registers
##
# 000a r0	REG	C2X	MACR 0		0
# 000a r1	REG	C2X	MACR 1		0
# 000a r2	REG	C2X	MACR 2		0
# 000a r3	REG	C2X	MACR 3		0
# 000a r4	REG	C2X	MACR 4		0
# 000a r5	REG	C2X	MACR 5		0
# 000a r6	REG	C2X	MACR 6		0
# 000a r7	REG	C2X	MACR 7		0
# 000a r8	REG	C2X	MACR 8		0
# 000a r9	REG	C2X	MACR 9		0
# 000a r10	REG	C2X	MACR 10		0
# 000a r11	REG	C2X	MACR 11		0
# 000a r12	REG	C2X	MACR 12		0
# 000a r13	REG	C2X	MACR 13		0
# 000a r14	REG	C2X	MACR 14		0
# 000a r15	REG	C2X	MACR 15		0
# 000a fp	REG	C2X	MACR 13		0
# 000a sp	REG	C2X	MACR 14		0
# 000a pc	REG	C2X	MACR 15		0

## Normal instructions

# 158a kcall	HARD HARD 0xcf	1  R W 
# 160a prober	PROBER TN1 0xc0	3  R B  A B  R L 
# 160a probew	PROBEW TN1 0xd0	3  R B  A B  R L 
# 161a rei	HARD HARD 0x20	0 
# 163a ldpctx	HARD HARD 0x60	0 
# 163b svpctx	HARD HARD 0x70	0 
# 165a mtpr	MTPR TN1 0xad	2  R L  R L 
# 165b mfpr	MFPR TN1 0xbd	2  R L  W L 
# 169a bpt	HARD HARD 0x30	0 
# 171a halt	HARD HARD 0x00	0 
# 175a movb	MOV TN1	 0x09	2  R B  W B 
# 175b movw	MOV TN1	 0x0b	2  R W  W W 
# 175c movl	MOV TN1	 0x0d	2  R L  W L 
# 175d movblk	HARD HARD 0xf8	0 
# 177a movob	HARD HARD 0xc9	2  R B  W B
# 177b movow	HARD HARD 0xcb	2  R W  W W
# 180a pushb	PUSH TN1 0xd9	1  R B 
# 180b pushw	PUSH TN1 0xdb	1  R W 
# 180a pushl	PUSH TN1 0xdd	1  R L 
# 180d pushd	HARD HARD 0x67	0 
# 181a clrb	CLR TN1	 0x49	1  W B 
# 181b clrw	CLR TN1	 0x4b	1  W W 
# 181c clrl	CLR TN1	 0x4d	1  W L 
# 182a mnegb	NEG TN1	 0xe8	2  R B  W B 
# 182b mnegw	NEG TN1	 0xea	2  R W  W W 
# 182c mnegl	NEG TN1	 0xec	2  R L  W L 
# 182d negf	HARD HARD 0xb6	0 
# 182e negd	HARD HARD 0xb7	0
# 183a mcomb	COM TN1	 0x29	2  R B  W B 
# 183b mcomw	COM TN1	 0x2b	2  R W  W W 
# 183c mcoml	COM TN1	 0x2d	2  R L  W L 
# 184A cvtbw	CVT TNX2 0x99	2  R B  W W 
# 184B cvtbl	CVT TNX2 0x89	2  R B  W L 
# 184C cvtwb	CVT TNX2 0x33	2  R W  W B 
# 184D cvtwl	CVT TNX2 0x23	2  R W  W L 
# 184E cvtlb	CVT TNX2 0x6f	2  R L  W B 
# 184F cvtlw	CVT TNX2 0x7f	2  R L  W W 
# 184a cvfl	CVT TN1	 0x86	1  W L 
# 184b cvdl	CVT TN1	 0x87	1  W L 
# 184c cvlf	CVT TN1	 0x76	1  R L  
# 184d cvld	CVT TN1	 0x77	1  R L  
# 184e cvdf	HARD HARD 0xa6	0 
# 187a movzbw	MOVZ TNX2 0xb9	2  R B  W W 
# 187b movzbl	MOVZ TNX2 0xa9	2  R B  W L 
# 187c movzwl	MOVZ TNX2 0xc3	2  R W  W L 
# 188a cmpb	CMP TN1	 0x19	2  R B  R B 
# 188b cmpw	CMP TN1	 0x1b	2  R W  R W 
# 188c cmpl	CMP TN1	 0x1d	2  R L  R L 
# 188d cmpf	CMP TN1	 0x36	1  R F 
# 188e cmpf2	CMP TN1	 0x46	2  R F  R F 
# 188f cmpd	CMP TN1	 0x37	1  R D 
# 188g cmpd2	CMP TN1	 0x47	2  R D  R D 
# 189a incb	INC TN1	 0x69	1  M B 
# 189b incw	INC TN1	 0x6b	1  M W 
# 189c incl	INC TN1	 0x6d	1  M L 
# 190a tstb	TST TN1	 0x59	1  R B 
# 190b tstw	TST TN1	 0x5b	1  R W 
# 190c tstl	TST TN1	 0x5d	1  R L 
# 190d tstf	HARD HARD 0x56	0 
# 190e tstd	HARD HARD 0x57	0  
# 191a addb2	ADD OP	 0x08	2  R B  M B 
# 191b addb3	ADD OP	 0x18	3  R B  R B  W B 
# 191c addw2	ADD OP	 0x0a	2  R W  M W 
# 191d addw3	ADD OP	 0x1a	3  R W  R W  W W 
# 191e addl2	ADD OP	 0x0c	2  R L  M L 
# 191f addl3	ADD OP	 0x1c	3  R L  R L  W L 
# 191g addf	ADD OP	 0xc6	1  R F
# 191h addd	ADD OP	 0xc7	1  R D
# 191i adda	ADD OP	 0x8e	2  R L  M L 
# 193a adwc	HARD HARD 0x8d	2  R L  M L 
# 194a andb2	AND OP	 0xa8	2  R B  M B 
# 194b andb3	AND OP	 0xb8	3  R B  R B  W B 
# 194c andw2	AND OP	 0xaa	2  R W  M W 
# 194d andw3	AND OP	 0xba	3  R W  R W  W W 
# 194e andl2	AND OP	 0xac	2  R L  M L 
# 194f andl3	AND OP	 0xbc	3  R L  R L  W L 
# 195c subb2	SUB OP	 0x28	2  R B  M B 
# 195d subb3	SUB OP	 0x38	3  R B  R B  W B 
# 195e subw2	SUB OP	 0x2a	2  R W  M W 
# 195f subw3	SUB OP	 0x3a	3  R W  R W  W W 
# 195g subl2	SUB OP	 0x2c	2  R L  M L 
# 195h subl3	SUB OP	 0x3c	3  R L  R L  W L 
# 195i subf	SUB OP	 0xd6	1  R F
# 195j subd	SUB OP	 0xd7	1  R D
# 195k suba	SUB OP	 0x9e	2  R L  M L 
# 197a decb	DEC TN1	 0x79	1  M B 
# 197b decw	DEC TN1	 0x7b	1  M W 
# 197c decl	DEC TN1	 0x7d	1  M L 
# 198a sbwc	HARD HARD 0x9d	2  R L  M L 
# 199a mull2	MUL OP	 0x4c	2  R L  M L 
# 199b mull3	MUL OP	 0x5c	3  R L  R L  W L 
# 199c mulf	MUL OP	 0xe6	1  R F 
# 199d muld	MUL OP	 0xe7	1  R D 
# 201a emul	HARD HARD 0x2e	4  R L  R L  R L  W Q 
# 204a divl2	DIV OP	 0x6c	2  R L  M L 
# 204b divl3	DIV OP	 0x7c	3  R L  R L  W L 
# 204c divf	DIV OP	 0xf6	1  R F 
# 204d divd	DIV OP	 0xf7	1  R D 
# 205a ediv	HARD HARD 0x3e	4  R L  R Q  W L  W L 
# 207a bitb	BIT TN1	 0x39	2  R B  R B 
# 207b bitw	BIT TN1	 0x3b	2  R W  R W 
# 207c bitl	BIT TN1	 0x3d	2  R L  R L 
# 208a ldf	HARD HARD 0x06	1  R F
# 208b ldd	HARD HARD 0x07	1  R D
# 208c ldfd	HARD HARD 0x97	1  R F
# 208d lnf	HARD HARD 0x16	1  R F
# 208e lnd	HARD HARD 0x17	1  R D
# 208f stf	HARD HARD 0x26	1  W F
# 208g std	HARD HARD 0x27	1  W D
# 209a orb2	OR OP	 0x88	2  R B  M B 
# 209b orb3	OR OP	 0x98	3  R B  R B  W B 
# 209c orw2	OR OP	 0x8a	2  R W  M W 
# 209d orw3	OR OP	 0x9a	3  R W  R W  W W 
# 209e orl2	OR OP	 0x8c	2  R L  M L 
# 209f orl3	OR OP	 0x9c	3  R L  R L  W L 
# 210a xorb2	XOR OP	 0xc8	2  R B  M B 
# 210b xorb3	XOR OP	 0xd8	3  R B  R B  W B 
# 210c xorw2	XOR OP	 0xca	2  R W  M W 
# 210d xorw3	XOR OP	 0xda	3  R W  R W  W W 
# 210e xorl2	XOR OP	 0xcc	2  R L  M L 
# 210f xorl3	XOR OP	 0xdc	3  R L  R L  W L 
# 211a shal	HARD HARD 0x4e	3  R B  R L  W L 
# 211b shar	HARD HARD 0x5e	3  R B  R L  W L 
# 212a shll	HARD HARD 0x48	3  R B  R L  W L 
# 212b shlq	HARD HARD 0x4a	3  R B  R Q  W Q 
# 212c shrl	HARD HARD 0x58	3  R B  R L  W L 
# 212c shrq	HARD HARD 0x5a	3  R B  R Q  W Q 
# 220a storer	HARD HARD 0xbb	2  R W  A L
# 221a loadr	HARD HARD 0xab	2  R W  A L
# 222a movpsl	HARD HARD 0xcd	1  W L 
# 223a bispsw	HARD HARD 0x8b	1  R W 
# 223b bicpsw	HARD HARD 0x9b	1  R W 
# 224a movab	MOVA TN1 0xe9	2  A B  W L 
# 224a pushab	PUSHA TN1 0xf9	1  A B 
# 224b movaw	MOVA TN1 0xeb	2  A W  W L 
# 224b pushaw	PUSHA TN1 0xfb	1  A W 
# 224c moval	MOVA TN1 0xed	2  A L  W L 
# 224c pushal	PUSHA TN1 0xfd	1  A L 
# 232a insque	HARD HARD 0xe0	2  A L  A L 
# 234a remque	HARD HARD 0xf0	1  A L 
# 251a ffc	HARD HARD 0xbe	2  R L  W L 
# 251b ffs	HARD HARD 0xae	2  R L  W L 
# 261a bneq	CBR JNE	 0x21	1  B B 
# 261b bnequ	CBR JNE	 0x21	1  B B 
# 261c beql	CBR JEQ	 0x31	1  B B 
# 261d beqlu	CBR JEQ	 0x31	1  B B 
# 261e bgtr	CBR JGT	 0x41	1  B B 
# 261f bleq	CBR JLE	 0x51	1  B B 
# 261g bgeq	CBR JGE	 0x81	1  B B 
# 261h blss	CBR JLT	 0x91	1  B B 
# 261i bgtru	CBR JHI	 0xa1	1  B B 
# 261j blequ	CBR JLOS 0xb1	1  B B 
# 261k bvc	CBR 0	 0xc1	1  B B 
# 261l bvs	CBR 0	 0xd1	1  B B 
# 261m bgequ	CBR JHIS 0xe1	1  B B 
# 261n bcc	CBR JHIS 0xf1	1  B B 
# 261o blssu	CBR JLO	 0xf1	1  B B 
# 261p bcs	CBR JLO	 0xe1	1  B B 
# 261q btcs	CBR 0	 0xce	1  R B 
# 263a brb	JBR S	 0x11	1  B B 
# 263b brw	JBR S	 0x13	1  B W 
# 263c jmp	JMP S	 0x71	1  A B 
# 264a bbs	CBR JBS	 0x0e	3  R L  R L  B W 
# 264b bbc	CBR JBC	 0x1e	3  R L  R L  B W 
# 266a bbssi	CBR JBSS 0x5f	3  R L  M L  B W 
# 270a aoblss	AOBLSS S 0x2f	3  R L  M L  B W 
# 270b aobleq	AOBLEQ S 0x3f	3  R L  M L  B W 
# 273a casel	CASE TN1 0xfc	3  R L  R L  R L 
# 282a calls	CALL S	 0xbf	2  R B  A B 
# 282b callf	CALL S	 0xfe	2  R B  A B 
# 284a ret	JBR RET	 0x40	0 
# 288a movs2	HARD HARD 0x82	0
# 288b movs3	HARD HARD 0xc2	0
# 294a cmps2	HARD HARD 0x92	0
# 294b cmps3	HARD HARD 0xd2	0
# 300a sinf	HARD HARD 0x05	0
# 300b cosf	HARD HARD 0x15	0
# 300c atanf	HARD HARD 0x25	0
# 300d logf	HARD HARD 0x35	0
# 300e sqrtf	HARD HARD 0x45	0
# 300f expf	HARD HARD 0x55	0
# 385a nop	HARD HARD 0x10	0