ack/mach/proto/ncg/data.h

103 lines
2.4 KiB
C
Raw Normal View History

1987-03-09 19:15:41 +00:00
/*
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
* See the copyright notice in the ACK home directory, in the file "Copyright".
*/
1994-06-24 14:02:31 +00:00
/* $Id$ */
1985-01-08 15:34:54 +00:00
#include <cgg_cg.h> /* set_p, c3_p */
1985-01-08 15:34:54 +00:00
typedef struct cost {
short ct_space;
short ct_time;
} cost_t,*cost_p;
typedef struct {
string ea_str;
word ea_off;
} address_t;
1985-01-08 15:34:54 +00:00
typedef struct {
int t_token; /* kind of token, -1 for register */
union {
word aw; /* integer type */
address_t aa; /* address type */
1985-01-08 15:34:54 +00:00
int ar; /* register type */
} t_att[TOKENSIZE];
} token_t,*token_p;
struct reginfo {
int r_repr; /* index in string table */
int r_size; /* size in bytes */
#if MAXMEMBERS!=0
int r_members[MAXMEMBERS]; /* register contained within this reg */
short r_clash[REGSETSIZE]; /* set of clashing registers */
int r_iclash; /* index in clashlist; other represen-
tation of r_clash
*/
1985-01-08 15:34:54 +00:00
#endif
int r_refcount; /* Times in use */
token_t r_contents; /* Current contents */
int r_tcount; /* Temporary count difference */
};
#if MAXMEMBERS!=0
#define clash(a,b) ((machregs[a].r_clash[(b)>>4]&(1<<((b)&017)))!=0)
#else
#define clash(a,b) ((a)==(b))
#endif
typedef struct {
int t_size; /* size in bytes */
cost_t t_cost; /* cost in bytes and time */
byte t_type[TOKENSIZE]; /* types of attributes, TT_??? */
int t_format; /* index of formatstring */
} tkdef_t,*tkdef_p;
struct emline {
int em_instr;
int em_optyp;
string em_soper;
union {
word em_ioper;
long em_loper;
} em_u;
};
#define OPNO 0
#define OPINT 1
#define OPSYMBOL 2
typedef struct {
int rl_n; /* number in list */
int rl_list[NREGS];
} rl_t,*rl_p;
/* gencode.c */
void genstr(int);
string ad2str(address_t);
void gennl(void);
void prtoken(token_p, int);
#ifdef USE_TES
void printlabel(int);
#endif
/* move.c */
int move(token_p, token_p, int, int, unsigned);
void setcc(token_p);
int test(token_p, int, int, unsigned);
/* subr.c */
int match(token_p, set_p, int);
void instance(int, token_p);
int eqtoken(token_p, token_p);
int distance(int);
unsigned costcalc(cost_t);
int ssize(int);
int tsize(token_p);
void tref(token_p, int);
int in_stack(int);
#ifdef MAXSPLIT
int split(token_p, int *, int, int);
#endif
unsigned docoerc(token_p, c3_p, int, int, int);
unsigned stackupto(token_p, int, int);
c3_p findcoerc(token_p, set_p);