2 #include "../2c/2.out.h"
26 typedef struct Adr Adr;
27 typedef struct Prog Prog;
28 typedef struct Txt Txt;
29 typedef struct Cases Case;
30 typedef struct Reg Reg;
31 typedef struct Rgn Rgn;
32 typedef struct Var Var;
33 typedef struct Multab Multab;
88 long rpo; /* reverse post ordering */
102 long loop; /* could be shorter */
138 #define BLOAD(r) band(bnot(r->refbehind), r->refahead)
139 #define BSTORE(r) band(bnot(r->calbehind), r->calahead)
140 #define LOAD(r) (~r->refbehind.b[z] & r->refahead.b[z])
141 #define STORE(r) (~r->calbehind.b[z] & r->calahead.b[z])
143 #define bset(a,n) ((a).b[(n)/32]&(1L<<(n)%32))
155 EXTERN ulong regbits;
157 #define B_INDIR (1<<0)
158 #define B_ADDR (1<<1)
163 EXTERN Txt txt[NTYPE][NTYPE];
164 EXTERN short opxt[ALLOP][NTYPE];
166 EXTERN int multabsize;
177 EXTERN long continpc;
183 EXTERN long mnstring;
186 EXTERN long nrathole;
193 EXTERN Rgn region[NRGN];
195 EXTERN char string[NSNAME];
196 EXTERN Sym* symrathole;
197 EXTERN Sym* symstatic;
198 EXTERN Var var[NVAR];
205 EXTERN uchar regused[NREG];
206 EXTERN uchar aregused[NREG];
207 EXTERN uchar fregused[NREG];
208 EXTERN uchar regbase[I_MASK];
209 EXTERN long exregoffset;
210 EXTERN long exaregoffset;
211 EXTERN long exfregoffset;
212 extern char* anames[];
213 extern Multab multab[];
215 void cgen(Node*, int, Node*);
216 void lcgen(Node*, int, Node*);
217 void bcgen(Node*, int);
218 void boolgen(Node*, int, int, Node*, Node*);
219 void sugen(Node*, int, Node*, long);
235 int findtst(Reg*, Prog*, int);
236 int setcc(Prog*, Prog*);
237 int compat(Adr*, Adr*);
240 int usedin(int, Adr*);
243 Reg* findop(Reg*, int, int, int);
248 int copy1(Adr*, Adr*, Reg*, int);
249 int copyu(Prog*, Adr*, Adr*);
250 int copyas(Adr*, Adr*);
251 int tasas(Adr*, Adr*);
252 int copyau(Adr*, Adr*);
253 int copysub(Adr*, Adr*, Adr*, Prog*, int);
263 int rcmp(const void*, const void*);
265 void addmove(Reg*, int, int, int);
266 Bits mkvar(Adr*, int);
267 void prop(Reg*, Bits, Bits);
268 void loopit(Reg*, long);
269 void synch(Reg*, Bits);
270 ulong allreg(ulong, Rgn*);
271 void paint1(Reg*, int);
272 ulong paint2(Reg*, int);
273 void paint3(Reg*, int, ulong, int);
274 void addreg(Adr*, int);
276 void codgen(Node*, Node*);
279 void usedset(Node*, int);
280 Node* nodconst(long);
282 int swcmp(const void*, const void*);
283 void doswit(int, Node*);
284 void swit1(C1*, int, long, int, Node*);
286 int bitload(Node*, int, int, int, Node*);
287 void bitstore(Node*, int, int, int, int, Node*);
288 long outstring(char*, long);
289 int doinc(Node*, int);
293 int eval(Node*, int);
295 void ieeedtod(Ieee*, double);
296 int nodalloc(Type*, int, Node*);
297 int mulcon(Node*, Node*, int, Node*);
298 int shlcon(Node*, Node*, int, Node*);
299 int mulcon1(Node*, long, int, Node*);
300 void nullwarn(Node*, Node*);
302 void tindex(Type*, Type*);
305 void oinit(int, int, int, int, int, int);
309 void naddr(Node*, Adr*, int);
310 int regalloc(Type*, int);
315 void gmove(Type*, Type*, int, Node*, int, Node*);
316 void gopcode(int, Type*, int, Node*, int, Node*);
321 void patch(Prog*, long);
322 void gpseudo(int, Sym*, int, long);
323 void gpseudotree(int, Sym*, Node*);
326 void bcomplex(Node*);
332 void com64init(void);
335 #pragma varargck type "A" int
336 #pragma varargck type "B" Bits
337 #pragma varargck type "D" Adr*
338 #pragma varargck type "N" Adr*
339 #pragma varargck type "P" Prog*
340 #pragma varargck type "S" char*
341 #pragma varargck type "R" int