65 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			2.4 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
 |