66 lines
2.5 KiB
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 "$Id$"
|
|
|
|
/*
|
|
* 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
|