4 #include "../8c/8.out.h"
12 #define TNAME (curtext?curtext->from.sym->name:noname)
19 typedef struct Adr Adr;
20 typedef struct Prog Prog;
21 typedef struct Sym Sym;
22 typedef struct Auto Auto;
23 typedef struct Optab Optab;
31 Prog *u0cond; /* not used, but should be D_BRANCH */
44 #define offset u0.u0offset
45 #define scon u0.u0scon
46 #define cond u0.u0cond
47 #define ieee u0.u0ieee
49 #define autom u1.u1autom
58 Prog* pcond; /* work on this */
62 char width; /* fake for DATA */
63 char ft; /* oclass cache */
65 uchar mark; /* work on these */
117 MAXHIST = 20, /* limit of path elements for history symbols */
141 Ycs, Yss, Yds, Yes, Yfs, Ygs,
142 Ygdtr, Yidtr, Yldtr, Ymsw, Ytask,
143 Ycr0, Ycr1, Ycr2, Ycr3, Ycr4, Ycr5, Ycr6, Ycr7,
144 Ydr0, Ydr1, Ydr2, Ydr3, Ydr4, Ydr5, Ydr6, Ydr7,
145 Ytr0, Ytr1, Ytr2, Ytr3, Ytr4, Ytr5, Ytr6, Ytr7,
170 Zibm_r, /* mmx1,mmx2/mem64,imm8 */
190 Pe = 0x66, /* operand escape */
191 Pm = 0x0f, /* 2byte opcode escape */
192 Pq = 0xff, /* both escape */
193 Pb = 0xfe, /* byte operands */
194 Pf2 = 0xf2, /* xmm escape 1 */
195 Pf3 = 0xf3, /* xmm escape 2 */
197 Roffset = 22, /* no. bits for offset in relocation address */
198 Rindex = 10, /* no. bits for index in relocation address */
205 char obuf[MAXIO]; /* output buffer */
206 uchar ibuf[MAXIO]; /* input buffer */
214 #pragma varargck type "A" int
215 #pragma varargck type "A" uint
216 #pragma varargck type "D" Adr*
217 #pragma varargck type "P" Prog*
218 #pragma varargck type "R" int
219 #pragma varargck type "R" uint
220 #pragma varargck type "S" char*
222 #pragma varargck argpos diag 1
225 EXTERN long HEADTYPE;
228 EXTERN long INITTEXT;
229 EXTERN char* INITENTRY; /* entry point */
237 EXTERN Auto* curauto;
238 EXTERN Auto* curhist;
240 EXTERN Prog* curtext;
244 EXTERN char debug[128];
245 EXTERN char literal[32];
248 EXTERN char fnuxi8[8];
249 EXTERN char fnuxi4[4];
250 EXTERN Sym* hash[NHASH];
251 EXTERN Sym* histfrog[MAXHIST];
252 EXTERN int histfrogp;
254 EXTERN char* library[50];
255 EXTERN char* libraryobj[50];
257 EXTERN int xrefresolv;
259 EXTERN char inuxi1[1];
260 EXTERN char inuxi2[2];
261 EXTERN char inuxi4[4];
262 EXTERN char ycover[Ymax*Ymax];
263 EXTERN uchar* andptr;
264 EXTERN uchar and[30];
265 EXTERN char reg[D_XNONE];
272 EXTERN char* outfile;
278 EXTERN long textsize;
285 EXTERN int doexp, dlm;
286 EXTERN int imports, nimports;
287 EXTERN int exports, nexports, allexport;
293 extern Optab optab[];
294 extern Optab* opindex[];
295 extern char* anames[];
302 void addhist(long, int);
303 Prog* appendp(Prog*);
310 long atolwhex(char*);
311 Prog* brchain(Prog*);
314 void ckoff(Sym*, long);
316 double cputime(void);
317 void datblk(long, long);
318 void diag(char*, ...);
324 void dynreloc(Sym*, ulong, int);
325 long entryvalue(void);
326 void errorexit(void);
328 int find1(long, int);
329 int find2(long, int);
332 void histtoauto(void);
333 double ieeedtod(Ieee*);
334 long ieeedtof(Ieee*);
336 void ldobj(int, long, char*);
339 Sym* lookup(char*, int);
342 void main(int, char*[]);
350 void readundefs(char*, int);
352 long reuse(Prog*, Sym*);
353 long rnd(long, long);
359 void xdefine(char*, int, long);
361 int zaddr(uchar*, Adr*, Sym*[]);
364 #pragma varargck type "D" Adr*
365 #pragma varargck type "P" Prog*
366 #pragma varargck type "R" int
367 #pragma varargck type "A" int