/* * (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)