xref: /original-bsd/old/as.vax/instrs.h (revision 5133e8a4)
1 /*
2  * Copyright (c) 1982 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)instrs.h	5.1 (Berkeley) 04/30/85
7  */
8 
9 /*
10  *	Argument data types
11  *
12  *	If you change these definitions, you must also change the tables
13  *	in assizetab.c
14  */
15 #define	TYPB		000	/* byte integer */
16 #define	TYPW		001	/* word integer */
17 #define	TYPL		002	/* long integer */
18 #define	TYPQ		003	/* quad integer */
19 #define	TYPO		004	/* octa integer */
20 #define	TYPF		005	/* F float */
21 #define	TYPD		006	/* D float */
22 #define	TYPG		007	/* G float */
23 #define	TYPH		010	/* H float */
24 #define	TYPUNPACKED	011	/* when unpacked into mantissa & exponent */
25 #define	TYPNONE		012	/* when nothing */
26 #define	TYPLG		4	/* number of bits the above take up */
27 
28 #define	TYPMASK	((1<<TYPLG)-1)	/* the mask (assumes 2's comp arith) */
29 /*
30  *	Constructors and extractors for argument access kinds and types
31  */
32 #define A_CONS(access, type)	((access) | (type))
33 #define	A_ACCEXT(consed)	((consed) & (TYPMASK << TYPLG))
34 #define	A_TYPEXT(consed)	((consed) & TYPMASK)
35 
36 /*
37  * Argument access types used to test validity of operands to operators
38  */
39 #define	ACCR	(1<<TYPLG)			/* read */
40 #define	ACCW	(2<<TYPLG)			/* write */
41 #define	ACCB	(4<<TYPLG)			/* branch displacement */
42 #define	ACCA	(8<<TYPLG)			/* address only */
43 #define	ACCV	(8<<TYPLG)			/* address only */
44 #define	ACCM	(ACCR | ACCW)			/* modify */
45 #define	ACCI	(ACCB | ACCR)			/* XFC code */
46 
47 #define ACCESSMASK	(ACCA | ACCR | ACCW | ACCB)	/* the mask */
48 
49 /*
50  *	Construction of TYPX and ACCX, to make the instrs table
51  *	easy to use and read.
52  */
53 /*
54  *	For real memory address
55  */
56 #define	A_AB	A_CONS(ACCA, TYPB)
57 #define	A_AW	A_CONS(ACCA, TYPW)
58 #define	A_AL	A_CONS(ACCA, TYPL)
59 #define	A_AQ	A_CONS(ACCA, TYPQ)
60 #define	A_AO	A_CONS(ACCA, TYPO)
61 #define	A_AF	A_CONS(ACCA, TYPF)
62 #define	A_AD	A_CONS(ACCA, TYPD)
63 #define	A_AG	A_CONS(ACCA, TYPG)
64 #define	A_AH	A_CONS(ACCA, TYPH)
65 /*
66  *	For real memory addresses, or register addresses [sic]
67  *
68  *	CHEAT! we just call these read access, since
69  *	registers are allowed. All field instruction, except insv,
70  *	are are read access fields.
71  */
72 #define	A_VB	A_CONS(ACCR, TYPB)
73 #define	A_VW	A_CONS(ACCR, TYPW)
74 #define	A_VL	A_CONS(ACCR, TYPL)
75 #define	A_VQ	A_CONS(ACCR, TYPQ)
76 #define	A_VO	A_CONS(ACCR, TYPO)
77 #define	A_VF	A_CONS(ACCR, TYPF)
78 #define	A_VD	A_CONS(ACCR, TYPD)
79 #define	A_VG	A_CONS(ACCR, TYPG)
80 #define	A_VH	A_CONS(ACCR, TYPH)
81 /*
82  *	For branch displacement
83  */
84 #define	A_BB	A_CONS(ACCB, TYPB)
85 #define	A_BW	A_CONS(ACCB, TYPW)
86 /*
87  *	For modification
88  */
89 #define	A_MB	A_CONS(ACCM, TYPB)
90 #define	A_MW	A_CONS(ACCM, TYPW)
91 #define	A_ML	A_CONS(ACCM, TYPL)
92 #define	A_MF	A_CONS(ACCM, TYPF)
93 #define	A_MD	A_CONS(ACCM, TYPD)
94 #define	A_MG	A_CONS(ACCM, TYPG)
95 #define	A_MH	A_CONS(ACCM, TYPH)
96 /*
97  *	For reading
98  */
99 #define	A_RB	A_CONS(ACCR, TYPB)
100 #define	A_RW	A_CONS(ACCR, TYPW)
101 #define	A_RL	A_CONS(ACCR, TYPL)
102 #define	A_RQ	A_CONS(ACCR, TYPQ)
103 #define	A_RO	A_CONS(ACCR, TYPO)
104 #define	A_RF	A_CONS(ACCR, TYPF)
105 #define	A_RD	A_CONS(ACCR, TYPD)
106 #define	A_RG	A_CONS(ACCR, TYPG)
107 #define	A_RH	A_CONS(ACCR, TYPH)
108 /*
109  *	For writing
110  */
111 #define	A_WB	A_CONS(ACCW, TYPB)
112 #define	A_WW	A_CONS(ACCW, TYPW)
113 #define	A_WL	A_CONS(ACCW, TYPL)
114 #define	A_WQ	A_CONS(ACCW, TYPQ)
115 #define	A_WO	A_CONS(ACCW, TYPO)
116 #define	A_WF	A_CONS(ACCW, TYPF)
117 #define	A_WD	A_CONS(ACCW, TYPD)
118 #define	A_WG	A_CONS(ACCW, TYPG)
119 #define	A_WH	A_CONS(ACCW, TYPH)
120 
121 #ifndef INSTTAB
122 /*
123  *	Define what the entries in the table look like.
124  *	This is only used for adb and sdb; not for as.
125  */
126 #define	INSTTAB
127 struct insttab{
128 	char	*iname;
129 	u_char	eopcode;
130 	u_char	popcode;
131 	char	nargs;
132 	u_char	argtype[6];
133 } insttab[];
134 
135 #define OP(name,eopcode,popdcode,nargs,a1,a2,a3,a4,a5,a6) {name,eopcode,popdcode,nargs,a1,a2,a3,a4,a5,a6}
136 
137 #endif INSTTAB
138 
139 /*
140  *	Definitions for the escape bytes
141  */
142 #define	CORE	0
143 #define	NEW	1
144 #define	ESCD	0xfd
145 #define	ESCF	0xff
146