92 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
 | 
						|
 * See the copyright notice in the ACK home directory, in the file "Copyright".
 | 
						|
 */
 | 
						|
/* $Id$ */
 | 
						|
 | 
						|
#define NARGBYTES	14
 | 
						|
struct argbytes {
 | 
						|
	argb_p	ab_next;
 | 
						|
	short	ab_index;
 | 
						|
	char	ab_contents[NARGBYTES];
 | 
						|
};
 | 
						|
 | 
						|
typedef struct {
 | 
						|
	sym_p	av_sp;
 | 
						|
	offset	av_offset;
 | 
						|
} s_a_val;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
	short	ac_length;
 | 
						|
	argb_t	ac_con;
 | 
						|
} s_a_con;
 | 
						|
 | 
						|
typedef union {
 | 
						|
	offset	a_offset;
 | 
						|
	num_p	a_np;
 | 
						|
	sym_p	a_sp;
 | 
						|
	s_a_val	a_val;
 | 
						|
	argb_t	a_string;
 | 
						|
	s_a_con	a_con;
 | 
						|
} un_a_a;
 | 
						|
 | 
						|
struct arg {
 | 
						|
	arg_p	a_next;
 | 
						|
	short	a_typ;
 | 
						|
	un_a_a	a_a;
 | 
						|
};
 | 
						|
 | 
						|
/* possible values for .a_typ
 | 
						|
 */
 | 
						|
 | 
						|
#define ARGOFF	0
 | 
						|
#define ARGNUM	1
 | 
						|
#define ARGSYM	2
 | 
						|
#define ARGVAL	3
 | 
						|
#define ARGSTR	4
 | 
						|
#define ARGICN	5
 | 
						|
#define ARGUCN	6
 | 
						|
#define ARGFCN	7
 | 
						|
 | 
						|
typedef struct {
 | 
						|
	sym_p	lasv_sp;
 | 
						|
	short	lasv_short;
 | 
						|
} s_la_sval;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
	sym_p	lalv_sp;
 | 
						|
	offset	lalv_offset;
 | 
						|
} s_la_lval;
 | 
						|
 | 
						|
typedef union {
 | 
						|
	short	la_short;
 | 
						|
	offset	la_offset;
 | 
						|
	num_p	la_np;
 | 
						|
	sym_p	la_sp;
 | 
						|
	s_la_sval la_sval;
 | 
						|
	s_la_lval la_lval;
 | 
						|
	arg_p	la_arg;
 | 
						|
} un_l_a;
 | 
						|
 | 
						|
struct line {
 | 
						|
	line_p		l_next;		/* maintains linked list */
 | 
						|
	byte		l_instr;	/* instruction number */
 | 
						|
	byte		l_optyp;	/* specifies what follows */
 | 
						|
	un_l_a		l_a;
 | 
						|
};
 | 
						|
 | 
						|
/* Possible values for .l_optyp */
 | 
						|
 | 
						|
#define OPNO		0	/* no operand */
 | 
						|
#define OPSHORT		1	/* 16 bit number */
 | 
						|
#define OPOFFSET	2	/* 16 or 32 bit number */
 | 
						|
#define OPNUMLAB	3	/* local label for branches */
 | 
						|
#define OPSYMBOL	4	/* global label or procedurename */
 | 
						|
#define OPSVAL		5	/* symbol + 16 bit constant */
 | 
						|
#define OPLVAL		6	/* symbol + 16 or 32 bit constant */
 | 
						|
#define OPLIST		7	/* operand list for some pseudos */
 | 
						|
#define OPMINI		8	/* start of minis */
 | 
						|
 | 
						|
#define Z_OPMINI	(OPMINI+100)	/* tunable */
 | 
						|
 | 
						|
#define CANMINI(x) ((x)>=OPMINI-Z_OPMINI && (x)<256-Z_OPMINI)
 |