ack/mach/vax4/as/mach1.c
2019-03-25 00:14:08 +08:00

75 lines
2 KiB
C

/*
* (c) copyright 1990 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
#define RCSID1 "$Id$"
/*
* VAX-11 Machine dependent C declarations
*/
/* Addressing modes */
#define REG_MODE 5
#define REGDEF_MODE 6
#define AI_MODE 8
#define AI_DEF_MODE 9
#define AD_MODE 7
#define DISPLB_MODE 10
#define DISPLW_MODE 12
#define DISPLL_MODE 14
#define DISPLB_DEF_MODE 11
#define DISPLW_DEF_MODE 13
#define DISPLL_DEF_MODE 15
#define INDEX_MODE 4
#define DISPL 16 /* not an addressing mode; used for branch
displacement addressing
*/
#define ABS 17 /* absolute mode (only for internal use) */
#define IMM 18 /* immediate mode (only for internal use) */
#define REL 19 /* relative mode (only for internal use) */
#define REL_DEF 20 /* relative deferred mode (only for internal
use)
*/
/* Some mnemonics used in mach5.c */
#define PC 15 /* program counter */
#define BRB 0x11 /* opcode of branch with byte offset */
#define BRW 0x31 /* opcode of branch with word offset */
#define JMP 0x17 /* opcode of jmp instruction */
/* Test if a constant is suitable for literal mode */
#define literal(z) (((z) & ~(int)0x3f) == 0)
/* Declarations for operands */
struct operand {
expr_t exp;
int mode; /* addressing mode */
int reg; /* register used in addressing mode */
int relo; /* index in relocation table for exp */
int size; /* size as imposed by instruction
-1 indicates bit-field (no immediate mode
allowed)
-2 indicates address (no register mode
or immediate mode allowed)
*/
int index_reg; /* for indexed mode contains index reg,
-1 if not index mode
*/
};
extern struct operand opnd[6]; /* maximum number of operands of a VAX
instruction is 6
*/
extern int op_ind; /* index in opng array */
/* VAX4 Specific instructions */
void branch(int opc, expr_t exp);
void ext_branch(int opc, expr_t exp);
void operands(void);