Pristine Ack-5.5
[Ack-5.5.git] / mach / vax4 / as / mach1.c
1 /*
2  * (c) copyright 1990 by the Vrije Universiteit, Amsterdam, The Netherlands.
3  * See the copyright notice in the ACK home directory, in the file "Copyright".
4  */
5 #define RCSID1 "$Id: mach1.c,v 1.4 1994/06/24 13:41:07 ceriel Exp $"
6
7 /*
8  * VAX-11 Machine dependent C declarations
9  */
10
11 /* Addressing modes */
12
13 #define REG_MODE         5
14 #define REGDEF_MODE      6
15 #define AI_MODE          8
16 #define AI_DEF_MODE      9
17 #define AD_MODE          7
18 #define DISPLB_MODE     10
19 #define DISPLW_MODE     12
20 #define DISPLL_MODE     14
21 #define DISPLB_DEF_MODE 11
22 #define DISPLW_DEF_MODE 13
23 #define DISPLL_DEF_MODE 15
24 #define INDEX_MODE       4
25
26 #define DISPL           16      /* not an addressing mode; used for branch
27                                    displacement addressing
28                                 */
29 #define ABS             17      /* absolute mode (only for internal use) */
30 #define IMM             18      /* immediate mode (only for internal use) */
31 #define REL             19      /* relative mode (only for internal use) */
32 #define REL_DEF         20      /* relative deferred mode (only for internal
33                                    use)
34                                 */
35
36 /* Some mnemonics used in mach5.c */
37
38 #define PC              15      /* program counter */
39 #define BRB             0x11    /* opcode of branch with byte offset */
40 #define BRW             0x31    /* opcode of branch with word offset */
41 #define JMP             0x17    /* opcode of jmp instruction */
42
43 /* Test if a constant is suitable for literal mode */
44
45 #define literal(z)      (((z) & ~(int)0x3f) == 0)
46
47 /* Declarations for operands */
48
49 struct operand {
50         expr_t  exp;
51         int     mode;           /* addressing mode */
52         int     reg;            /* register used in addressing mode */
53         int     relo;           /* index in relocation table for exp */
54         int     size;           /* size as imposed by instruction
55                                    -1 indicates bit-field (no immediate mode
56                                       allowed)
57                                    -2 indicates address (no register mode
58                                       or immediate mode allowed)
59                                 */
60         int     index_reg;      /* for indexed mode contains index reg,
61                                    -1 if not index mode
62                                 */
63 };
64
65 extern struct operand opnd[6];  /* maximum number of operands of a VAX
66                                    instruction is 6
67                                 */
68 extern int op_ind;              /* index in opng array */