ack/mach/vax4/as/mach2.c

66 lines
2.5 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 RCSID2 "$Header$"
/*
* VAX-11 machine dependent yacc declarations
*/
/* operands are indicated with a letter combination:
b - general operand of byte size
w - general operand of word size
l - general operand of long size
u - general operand of > long size (immediate mode is not
implemented for this size, and neither are immediate
floating point encodings
A - an operand of which the address is taken (so, no register
or immediate mode)
V - a bit-field operand (no immediate mode)
Bb - byte offset branch
Bw - word offset branch
Bl - long offset branch
Bx - branch, size of offset determined by instruction
Be - extended conditional branch; the instruction may be replaced
by a reverse-conditional branch over a branch or jump
To reduce the number of terminals, some instructions that have operands of
equal size are coded with an X instead of b, w, or l; these instructions
have the size in the high order word of the valu field. This is needed
because some yacc versions do not accept grammars with more than 127
terminal symbols.
*/
%token <y_word> REG
%token <y_word> CASE_X_X_X
%token <y_word> OP0
%token <y_word> OP1_A, OP1_Bx, OP1_u, OP1_Be
%token <y_word> OP1_BX, OP1_X
%token <y_word> OP2_A_A, OP2_A_l, OP2_b_b, OP2_b_l, OP2_b_u, OP2_b_w, OP2_l_A,
OP2_l_Bb, OP2_l_b, OP2_l_l, OP2_l_u, OP2_l_w, OP2_u_b, OP2_u_l,
OP2_u_u, OP2_u_w, OP2_w_b, OP2_w_l, OP2_w_u, OP2_w_w, OP2_l_Be
%token <y_word> OP3_b_b_b, OP3_b_l_l, OP3_b_u_u, OP3_b_w_A, OP3_l_V_Bb,
OP3_l_l_Bb, OP3_l_l_l, OP3_l_w_A, OP3_u_u_u, OP3_u_w_A,
OP3_w_A_A, OP3_w_A_l, OP3_w_w_w, OP3_l_V_Be
%token <y_word> OP4_A_l_w_A, OP4_b_b_b_Bw, OP4_l_b_V_l, OP4_l_l_b_V,
OP4_l_l_l_Bw, OP4_l_l_l_u, OP4_l_u_l_l, OP4_u_u_u_Bw,
OP4_w_A_A_A, OP4_w_A_A_b, OP4_w_A_w_A, OP4_w_w_w_Bw
%token <y_word> OP5_u_b_u_l_u, OP5_u_w_u_l_u, OP5_w_A_A_w_A, OP5_w_A_b_w_A
%token <y_word> OP6_b_w_A_b_w_A, OP6_l_l_l_l_l_l, OP6_w_A_b_A_w_A,
OP6_w_A_w_A_w_A
/* operand types:
O - the b, w, l, A and V operands (they all fall into the same
syntactic category)
B - branch offsets (these do not result in an addressing mode
byte)
*/
%type <y_word> OP1_O, OP1_B
%type <y_word> OP2_O_O, OP2_O_B
%type <y_word> OP3_O_O_O, OP3_O_O_B
%type <y_word> OP4_O_O_O_O, OP4_O_O_O_B
%type <y_word> OP5_O_O_O_O_O
%type <y_word> OP6_O_O_O_O_O_O
%type <y_word> CASE_O_O_O
%type <y_word> oper