ack/util/cgg/booth.h

230 lines
5.9 KiB
C

#include <local.h>
#ifdef extern
#define INIT(x) = x
#else
#define INIT(x) /* empty */
#endif
#if BIGMACHINE
#define BORS(x,y) x
#else
#define BORS(x,y) y
#endif
/* Tunable constants */
#define MAXALLREG 5 /* Maximum number of allocates per rule */
#define MAXREGS BORS(36,32) /* Total number of registers */
#define MAXREGVARS 8 /* Maximum regvars per type */
#define MAXPROPS 16 /* Total number of register properties */
#define MAXTOKENS BORS(75,32) /* Different kind of tokens */
#define MAXSETS BORS(100,80) /* Number of tokenexpressions definable */
#define MAXEMPATLEN 25 /* Maximum length of EM-pattern/replacement */
#define TOKENSIZE 5 /* Maximum number of fields in token struct */
#define MAXINSTANCE BORS(250,120) /* Maximum number of different tokeninstances */
#define MAXSTRINGS BORS(800,400)/* Maximum number of different codestrings */
#define MAXPATTERN BORS(8000,6000) /* Maximum number of bytes in pattern[] */
#define MAXNODES BORS(500,400) /* Maximum number of expression nodes */
#define MAXMEMBERS 2 /* Maximum number of subregisters per reg */
#define NMOVES BORS(50,30) /* Maximum number of move definitions */
#define MAXC1 20 /* Maximum of coercions type 1 */
#define MAXC2 20 /* Maximum of coercions type 2 */
#define MAXC3 20 /* Maximum of coercions type 3 */
#define MAXSPLIT 4 /* Maximum degree of split */
#define MAXNSTR 40 /* Maximum consecutive strings in coderule */
extern char *hname INIT("tables.h");
extern char *cname INIT("tables.c");
extern char *iname; /* stdin */
/* Derived constants */
#define SETSIZE ((MAXREGS+1+MAXTOKENS+15)>>4)
#define PROPSETSIZE ((MAXPROPS+15)>>4)
#define BMASK 0377
#define BSHIFT 8
#define TRUE 1
#define FALSE 0
#define MAXPATLEN 7 /* Maximum length of tokenpatterns */
typedef char byte;
typedef char * string;
extern char *malloc(),*myalloc();
#include <stdio.h>
#include <assert.h>
#include <ctype.h>
#include <em_spec.h>
#include <em_flag.h>
#include <em_reg.h>
#include <cg_pattern.h>
typedef struct list1str {
struct list1str *l1next;
string l1name;
} *list1;
typedef struct list2str {
struct list2str *l2next;
list1 l2list;
} *list2;
typedef struct list3str {
struct list3str *l3next;
list2 l3list;
} *list3;
typedef struct reginfo {
string rname;
string rrepr;
int rsize;
int rmembers[MAXMEMBERS];
int rregvar;
short rprop[PROPSETSIZE];
} *reginfo;
typedef struct tokeninfo {
string t_name;
list2 t_struct;
struct {
int t_type;
string t_sname;
} t_fields[TOKENSIZE-1];
int t_size;
cost_t t_cost;
int t_format;
} token_t,*token_p;
typedef struct ident {
struct ident *i_next;
string i_name;
int i_type;
# define IREG 1
# define IPRP 2
# define ITOK 3
# define IEXP 4
union {
int i_regno;
int i_prpno;
int i_tokno;
int i_expno;
} i_i;
} ident_t,*ident_p;
#define ITABSIZE 32
extern ident_p identtab[ITABSIZE];
#define LOOKUP 0
#define HALFWAY 1
#define ENTER 2
#define JUSTLOOKING 3
typedef struct expr {
int expr_typ;
# define TYPINT 1
# define TYPREG 2
# define TYPSTR 3
# define TYPBOOL 4
int expr_index;
} expr_t,*expr_p;
extern unsigned cc1 INIT(1),cc2 INIT(1),cc3 INIT(1),cc4 INIT(1);
extern node_t nodes[MAXNODES];
extern node_p lastnode INIT(nodes+1);
extern string codestrings[MAXSTRINGS];
extern int ncodestrings;
extern int strar[MAXNSTR];
extern int nstr;
extern int pathash[256];
extern reginfo machregs[MAXREGS];
extern char stregclass[MAXREGS];
extern int nmachregs INIT(1);
extern int nregclasses INIT(1);
extern int maxmembers;
extern struct {
ident_p propname;
set_t propset;
} machprops[MAXPROPS];
extern int nprops;
extern token_t machtokens[MAXTOKENS];
extern int nmachtokens INIT(1);
extern set_t machsets[MAXSETS];
extern int nmachsets;
extern int patmnem[MAXEMPATLEN];
extern int empatlen;
extern int maxempatlen;
extern int empatexpr;
extern int maxrule INIT(1);
extern int pattokexp[MAXPATLEN];
extern int tokpatlen;
extern int lookident; /* lexical analyzer flag */
extern list3 structpool;
extern int nallreg;
extern int allreg[MAXALLREG];
extern int maxallreg;
extern int lino;
extern int nerrors;
extern int curtokexp;
extern expr_t arexp[TOKENSIZE];
extern int narexp;
extern inst_t arinstance[MAXINSTANCE];
extern int narinstance INIT(1);
extern move_t machmoves[NMOVES];
extern int nmoves;
extern byte pattern[MAXPATTERN];
extern int npatbytes;
extern int prevind;
extern int rulecount; /* Temporary index for ... construct */
extern int ncoderules;
extern int codebytes;
extern FILE *cfile;
extern FILE *hfile;
extern int maxtokensize;
extern int dealflag;
extern int emrepllen;
extern int replmnem[MAXEMPATLEN];
extern int tokrepllen;
extern int replinst[MAXPATLEN];
extern int replexpr[MAXPATLEN];
extern c1_t c1coercs[MAXC1];
extern c2_t c2coercs[MAXC2];
extern c3_t c3coercs[MAXC3];
extern int nc1,nc2,nc3;
extern int maxsplit;
extern int wsize INIT(-1);
extern int psize INIT(-1);
extern int bsize INIT(-1);
extern char *fmt;
extern int cchandled;
extern int ccspoiled;
extern int ccregexpr;
extern int ccinstanceno;
extern int cocopropno;
extern int cocosetno;
extern int allexpno;
extern int rvused; /* regvars used */
extern int nregvar[4]; /* # of register variables of all kinds */
extern int rvnumbers[4][MAXREGVARS]; /* The register numbers */
#define chktabsiz(size,maxsize,which) if(size>=maxsize) tabovf(which)
#define MUST1BEINT(e) int exp1=e.expr_index;tstint(e)
#define MUST2BEINT(e1,e2) int exp1=e1.expr_index,exp2=e2.expr_index;tstint(e1);tstint(e2)
#define MUST1BEBOOL(e) int exp1=e.expr_index;tstbool(e)
#define MUST2BEBOOL(e1,e2) int exp1=e1.expr_index,exp2=e2.expr_index;tstbool(e1);tstbool(e2)
extern ident_p ilookup();
extern list2 lookstruct();
extern string scopy();
extern unsigned hash();