4 #include "../6c/6.out.h"
5 #include "../cc/compat.h"
9 #define TNAME (curtext?curtext->from.sym->name:noname)
15 typedef struct Adr Adr;
16 typedef struct Prog Prog;
17 typedef struct Sym Sym;
18 typedef struct Auto Auto;
19 typedef struct Optab Optab;
20 typedef struct Movtab Movtab;
28 Prog *u0cond; /* not used, but should be D_BRANCH */
41 #define offset u0.u0offset
42 #define scon u0.u0scon
43 #define cond u0.u0cond
44 #define ieee u0.u0ieee
46 #define autom u1.u1autom
55 Prog* pcond; /* work on this */
58 uchar mark; /* work on these */
62 char width; /* fake for DATA */
63 char mode; /* 16, 32, or 64 */
122 MAXHIST = 20, /* limit of path elements for history symbols */
148 Ycs, Yss, Yds, Yes, Yfs, Ygs,
149 Ygdtr, Yidtr, Yldtr, Ymsw, Ytask,
150 Ycr0, Ycr1, Ycr2, Ycr3, Ycr4, Ycr5, Ycr6, Ycr7, Ycr8,
151 Ydr0, Ydr1, Ydr2, Ydr3, Ydr4, Ydr5, Ydr6, Ydr7,
152 Ytr0, Ytr1, Ytr2, Ytr3, Ytr4, Ytr5, Ytr6, Ytr7, Yrl32, Yrl64,
182 Zibm_r, /* mmx1,mmx2/mem64,imm8 */
203 P32 = 0x32, /* 32-bit only */
204 Pe = 0x66, /* operand escape */
205 Pm = 0x0f, /* 2byte opcode escape */
206 Pq = 0xff, /* both escape */
207 Pb = 0xfe, /* byte operands */
208 Pf2 = 0xf2, /* xmm escape 1 */
209 Pf3 = 0xf3, /* xmm escape 2 */
210 Pw = 0x48, /* Rex.w */
211 Py = 0x80, /* defaults to 64-bit mode */
213 Rxf = 1<<9, /* internal flag for Rxr on from */
214 Rxt = 1<<8, /* internal flag for Rxr on to */
215 Rxw = 1<<3, /* =1, 64-bit operand size */
216 Rxr = 1<<2, /* extend modrm reg */
217 Rxx = 1<<1, /* extend sib index */
218 Rxb = 1<<0, /* extend modrm r/m, sib base, or opcode reg */
220 Roffset = 22, /* no. bits for offset in relocation address */
221 Rindex = 10, /* no. bits for index in relocation address */
228 char obuf[MAXIO]; /* output buffer */
229 uchar ibuf[MAXIO]; /* input buffer */
237 #pragma varargck type "A" int
238 #pragma varargck type "A" uint
239 #pragma varargck type "D" Adr*
240 #pragma varargck type "P" Prog*
241 #pragma varargck type "R" int
242 #pragma varargck type "S" char*
244 #pragma varargck argpos diag 1
247 EXTERN long HEADTYPE;
248 EXTERN vlong INITDAT;
250 EXTERN vlong INITTEXT;
251 EXTERN char* INITENTRY; /* entry point */
258 EXTERN Auto* curauto;
259 EXTERN Auto* curhist;
261 EXTERN Prog* curtext;
264 EXTERN vlong datsize;
265 EXTERN char debug[128];
266 EXTERN char literal[32];
269 EXTERN uchar fnuxi8[8];
270 EXTERN uchar fnuxi4[4];
271 EXTERN Sym* hash[NHASH];
272 EXTERN Sym* histfrog[MAXHIST];
273 EXTERN int histfrogp;
275 EXTERN char* library[50];
276 EXTERN char* libraryobj[50];
278 EXTERN int xrefresolv;
279 EXTERN uchar inuxi1[1];
280 EXTERN uchar inuxi2[2];
281 EXTERN uchar inuxi4[4];
282 EXTERN uchar inuxi8[8];
283 EXTERN char ycover[Ymax*Ymax];
284 EXTERN uchar* andptr;
285 EXTERN uchar* rexptr;
286 EXTERN uchar and[30];
287 EXTERN int reg[D_NONE];
288 EXTERN int regrex[D_NONE+1];
294 EXTERN char* outfile;
300 EXTERN vlong textsize;
304 EXTERN char* paramspace;
307 EXTERN int doexp, dlm;
308 EXTERN int imports, nimports;
309 EXTERN int exports, nexports;
315 extern Optab optab[];
316 extern Optab* opindex[];
317 extern char* anames[];
324 void addhist(long, int);
325 Prog* appendp(Prog*);
332 vlong atolwhex(char*);
333 Prog* brchain(Prog*);
337 void ckoff(Sym*, long);
339 double cputime(void);
340 void datblk(long, long);
341 void diag(char*, ...);
347 void dynreloc(Sym*, ulong, int);
348 vlong entryvalue(void);
349 void errorexit(void);
351 int find1(long, int);
352 int find1v(vlong, int);
353 int find2(long, int);
355 void histtoauto(void);
356 double ieeedtod(Ieee*);
357 long ieeedtof(Ieee*);
359 void ldobj(int, long, char*);
362 Sym* lookup(char*, int);
365 void main(int, char*[]);
372 void readundefs(char*, int);
374 long reuse(Prog*, Sym*);
375 vlong rnd(vlong, vlong);
381 void xdefine(char*, int, vlong);
383 int zaddr(uchar*, Adr*, Sym*[]);