Pristine Ack-5.5
[Ack-5.5.git] / util / cgg / booth.h
1 #include <local.h>
2
3 #ifdef extern
4 #define INIT(x)         = x
5 #else
6 #define INIT(x)         /* empty */
7 #endif
8
9 #if BIGMACHINE
10 #define BORS(x,y) x
11 #else
12 #define BORS(x,y) y
13 #endif
14 /* Tunable constants */
15
16 #define MAXALLREG 5             /* Maximum number of allocates per rule */
17 #define MAXREGS BORS(36,32)     /* Total number of registers */
18 #define MAXREGVARS 8            /* Maximum regvars per type */
19 #define MAXPROPS 16             /* Total number of register properties */
20 #define MAXTOKENS BORS(75,32)   /* Different kind of tokens */
21 #define MAXSETS BORS(100,80)    /* Number of tokenexpressions definable */
22 #define MAXEMPATLEN 25          /* Maximum length of EM-pattern/replacement */
23 #define TOKENSIZE 5             /* Maximum number of fields in token struct */
24 #define MAXINSTANCE BORS(250,120) /* Maximum number of different tokeninstances */
25 #define MAXSTRINGS BORS(800,400)/* Maximum number of different codestrings */
26 #define MAXPATTERN BORS(8000,6000) /* Maximum number of bytes in pattern[] */
27 #define MAXNODES BORS(500,400)  /* Maximum number of expression nodes */
28 #define MAXMEMBERS 2            /* Maximum number of subregisters per reg */
29 #define NMOVES BORS(50,30)      /* Maximum number of move definitions */
30 #define MAXC1   20              /* Maximum of coercions type 1 */
31 #define MAXC2   20              /* Maximum of coercions type 2 */
32 #define MAXC3   20              /* Maximum of coercions type 3 */
33 #define MAXSPLIT 4              /* Maximum degree of split */
34 #define MAXNSTR 40              /* Maximum consecutive strings in coderule */
35
36 extern char *hname INIT("tables.h");
37 extern char *cname INIT("tables.c");
38 extern char *iname;                     /* stdin */
39
40 /* Derived constants */
41
42 #define SETSIZE ((MAXREGS+1+MAXTOKENS+15)>>4)
43 #define PROPSETSIZE ((MAXPROPS+15)>>4)
44
45 #define BMASK 0377
46 #define BSHIFT 8
47
48 #define TRUE    1
49 #define FALSE   0
50
51 #define MAXPATLEN 7             /* Maximum length of tokenpatterns */
52
53 typedef char byte;
54 typedef char * string;
55
56 extern char *myalloc();
57
58 #include <cg_pattern.h>
59
60 typedef struct list1str {
61         struct list1str *l1next;
62         string l1name;
63 } *list1;
64 typedef struct list2str {
65         struct list2str *l2next;
66         list1 l2list;
67 } *list2;
68 typedef struct list3str {
69         struct list3str *l3next;
70         list2 l3list;
71 } *list3;
72
73 typedef struct reginfo {
74         string rname;
75         string rrepr;
76         int rsize;
77         int rmembers[MAXMEMBERS];
78         int rregvar;
79         short rprop[PROPSETSIZE];
80 } *reginfo;
81
82 typedef struct tokeninfo {
83         string t_name;
84         list2 t_struct;
85         struct {
86                 int t_type;
87                 string t_sname;
88         } t_fields[TOKENSIZE-1];
89         int t_size;
90         cost_t t_cost;
91         int t_format;
92 } token_t,*token_p;
93
94 typedef struct ident {
95         struct ident *i_next;
96         string i_name;
97         int i_type;
98 #               define IREG 1
99 #               define IPRP 2
100 #               define ITOK 3
101 #               define IEXP 4
102         union {
103                 int i_regno;
104                 int i_prpno;
105                 int i_tokno;
106                 int i_expno;
107         } i_i;
108 } ident_t,*ident_p;
109
110 #define ITABSIZE 32
111 extern ident_p identtab[ITABSIZE];
112
113 #define LOOKUP          0
114 #define HALFWAY         1
115 #define ENTER           2
116 #define JUSTLOOKING     3
117
118
119 typedef struct expr {
120         int expr_typ;
121 #               define TYPINT  1
122 #               define TYPREG  2
123 #               define TYPSTR  3
124 #               define TYPBOOL 4
125         int expr_index;
126 } expr_t,*expr_p;
127
128 extern unsigned cc1 INIT(1),cc2 INIT(1),cc3 INIT(1),cc4 INIT(1);
129
130 extern node_t  nodes[MAXNODES];
131 extern node_p  lastnode INIT(nodes+1);
132
133 extern string codestrings[MAXSTRINGS];
134 extern int ncodestrings;
135
136 extern int strar[MAXNSTR];
137 extern int nstr;
138
139 extern int pathash[256];
140
141 extern reginfo machregs[MAXREGS];
142 extern char stregclass[MAXREGS];
143 extern int nmachregs INIT(1);
144 extern int nregclasses INIT(1);
145 extern int maxmembers;
146 extern struct {
147         ident_p propname;
148         set_t   propset;
149 } machprops[MAXPROPS];
150 extern int nprops;
151 extern token_t machtokens[MAXTOKENS];
152 extern int nmachtokens INIT(1);
153 extern set_t machsets[MAXSETS];
154 extern int nmachsets;
155 extern int patmnem[MAXEMPATLEN];
156 extern int empatlen;
157 extern int maxempatlen;
158 extern int empatexpr;
159 extern int maxrule INIT(1);
160 extern int pattokexp[MAXPATLEN];
161 extern int tokpatlen;
162 extern int lookident;        /* lexical analyzer flag */
163 extern list3 structpool;
164 extern int nallreg;
165 extern int allreg[MAXALLREG];
166 extern int maxallreg;
167 extern int lino;
168 extern int nerrors;
169 extern int curtokexp;
170 extern expr_t arexp[TOKENSIZE];
171 extern int narexp;
172 extern inst_t arinstance[MAXINSTANCE];
173 extern int narinstance INIT(1);
174 extern move_t machmoves[NMOVES];
175 extern int nmoves;
176 extern byte pattern[MAXPATTERN];
177 extern int npatbytes;
178 extern int prevind;
179 extern int rulecount;                  /* Temporary index for ... construct */
180 extern int ncoderules;
181 extern int codebytes;
182 extern FILE *cfile;
183 extern FILE *hfile;
184 extern int maxtokensize;
185 extern int dealflag;
186 extern int emrepllen;
187 extern int replmnem[MAXEMPATLEN];
188 extern int tokrepllen;
189 extern int replinst[MAXPATLEN];
190 extern int replexpr[MAXPATLEN];
191 extern c1_t c1coercs[MAXC1];
192 extern c2_t c2coercs[MAXC2];
193 extern c3_t c3coercs[MAXC3];
194 extern int nc1,nc2,nc3;
195 extern int maxsplit;
196 extern int wsize INIT(-1);
197 extern int psize INIT(-1);
198 extern int bsize INIT(-1);
199 extern char *fmt;
200
201 extern int cchandled;
202 extern int ccspoiled;
203 extern int ccregexpr;
204 extern int ccinstanceno;
205 extern int cocopropno;
206 extern int cocosetno;
207 extern int allexpno;
208
209 extern int rvused;      /* regvars used */
210 extern int nregvar[4];  /* # of register variables of all kinds */
211 extern int rvnumbers[4][MAXREGVARS];    /* The register numbers */
212
213 #define chktabsiz(size,maxsize,which) if(size>=maxsize) tabovf(which)
214
215 #define MUST1BEINT(e) int exp1=e.expr_index;tstint(e)
216 #define MUST2BEINT(e1,e2) int exp1=e1.expr_index,exp2=e2.expr_index;tstint(e1);tstint(e2)
217 #define MUST1BEBOOL(e) int exp1=e.expr_index;tstbool(e)
218 #define MUST2BEBOOL(e1,e2) int exp1=e1.expr_index,exp2=e2.expr_index;tstbool(e1);tstbool(e2)
219
220 extern ident_p ilookup();
221 extern list2 lookstruct();
222 extern string scopy();
223 extern unsigned hash();