4 #include "../qc/q.out.h"
10 typedef struct Adr Adr;
11 typedef struct Sym Sym;
12 typedef struct Autom Auto;
13 typedef struct Prog Prog;
14 typedef struct Optab Optab;
18 #define TNAME (curtext&&curtext->from.sym?curtext->from.sym->name:noname)
36 #define offset u0.u0offset
37 #define sval u0.u0sval
38 #define ieee u0.u0ieee
43 Adr from3; /* fma and rlwm */
52 short optab; /* could be uchar */
100 MAXHIST = 20, /* limit of path elements for history symbols */
137 C_SPR, /* special processor register */
138 C_SREG, /* segment register (32 bit implementations only) */
140 C_SCON, /* 16 bit signed */
141 C_UCON, /* low 16 bits 0 */
142 C_ADDCON, /* -0x8000 <= v < 0 */
143 C_ANDCON, /* 0 < v <= 0xFFFF */
169 Roffset = 22, /* no. bits for offset in relocation address */
170 Rindex = 10 /* no. bits for index in relocation address */
177 uchar obuf[MAXIO]; /* output buffer */
178 uchar ibuf[MAXIO]; /* input buffer */
186 EXTERN long HEADR; /* length of header */
187 EXTERN int HEADTYPE; /* type of header */
188 EXTERN long INITDAT; /* data location */
189 EXTERN long INITRND; /* data round above text location */
190 EXTERN long INITTEXT; /* text location */
191 EXTERN char* INITENTRY; /* entry point */
192 EXTERN long autosize;
198 EXTERN Auto* curauto;
199 EXTERN Auto* curhist;
201 EXTERN Prog* curtext;
203 EXTERN Prog* prog_movsw;
204 EXTERN Prog* prog_movdw;
205 EXTERN Prog* prog_movws;
206 EXTERN Prog* prog_movwd;
208 EXTERN char debug[128];
210 EXTERN char fnuxi8[8];
211 EXTERN Sym* hash[NHASH];
212 EXTERN Sym* histfrog[MAXHIST];
213 EXTERN int histfrogp;
215 EXTERN char* library[50];
216 EXTERN char* libraryobj[50];
218 EXTERN int xrefresolv;
220 EXTERN char inuxi1[1];
221 EXTERN char inuxi2[2];
222 EXTERN char inuxi4[4];
225 EXTERN char literal[32];
229 EXTERN long instoffset;
230 EXTERN char* outfile;
234 EXTERN long staticgen;
236 EXTERN long textsize;
238 EXTERN char xcmp[C_NCLASS][C_NCLASS];
243 EXTERN int doexp, dlm;
244 EXTERN int imports, nimports;
245 EXTERN int exports, nexports;
251 extern Optab optab[];
252 extern char* anames[];
253 extern char* cnames[];
262 void addhist(long, int);
263 void histtoauto(void);
265 void append(Prog*, Prog*);
269 int asmout(Prog*, Optab*, int);
271 long atolwhex(char*);
275 void ckoff(Sym*, long);
279 double cputime(void);
280 void datblk(long, long);
281 void diag(char*, ...);
285 void dynreloc(Sym*, long, int, int, int);
286 long entryvalue(void);
287 void errorexit(void);
288 void exchange(Prog*);
290 int find1(long, int);
293 double ieeedtod(Ieee*);
294 long ieeedtof(Ieee*);
297 void ldobj(int, long, char*);
300 void initmuldiv(void);
301 Sym* lookup(char*, int);
311 int ocmp(void*, void*);
313 Optab* oplook(Prog*);
316 void prepend(Prog*, Prog*);
319 void putsymb(char*, int, long, int);
320 void readundefs(char*, int);
323 long rnd(long, long);
324 void sched(Prog*, Prog*);
329 void xdefine(char*, int, long);
333 #pragma varargck type "A" int
334 #pragma varargck type "A" uint
335 #pragma varargck type "D" Adr*
336 #pragma varargck type "N" Adr*
337 #pragma varargck type "P" Prog*
338 #pragma varargck type "R" int
339 #pragma varargck type "S" char*
341 #pragma varargck argpos diag 1