4 #include "../6c/6.out.h"
12 #define TNAME (curtext?curtext->from.sym->name:noname)
18 typedef struct Adr Adr;
19 typedef struct Prog Prog;
20 typedef struct Sym Sym;
21 typedef struct Auto Auto;
22 typedef struct Optab Optab;
23 typedef struct Movtab Movtab;
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 */
61 uchar mark; /* work on these */
65 char width; /* fake for DATA */
66 char mode; /* 16, 32, or 64 */
125 MAXHIST = 20, /* limit of path elements for history symbols */
151 Ycs, Yss, Yds, Yes, Yfs, Ygs,
152 Ygdtr, Yidtr, Yldtr, Ymsw, Ytask,
153 Ycr0, Ycr1, Ycr2, Ycr3, Ycr4, Ycr5, Ycr6, Ycr7, Ycr8,
154 Ydr0, Ydr1, Ydr2, Ydr3, Ydr4, Ydr5, Ydr6, Ydr7,
155 Ytr0, Ytr1, Ytr2, Ytr3, Ytr4, Ytr5, Ytr6, Ytr7, Yrl32, Yrl64,
185 Zibm_r, /* mmx1,mmx2/mem64,imm8 */
206 P32 = 0x32, /* 32-bit only */
207 Pe = 0x66, /* operand escape */
208 Pm = 0x0f, /* 2byte opcode escape */
209 Pq = 0xff, /* both escape */
210 Pb = 0xfe, /* byte operands */
211 Pf2 = 0xf2, /* xmm escape 1 */
212 Pf3 = 0xf3, /* xmm escape 2 */
213 Pw = 0x48, /* Rex.w */
214 Py = 0x80, /* defaults to 64-bit mode */
216 Rxf = 1<<9, /* internal flag for Rxr on from */
217 Rxt = 1<<8, /* internal flag for Rxr on to */
218 Rxw = 1<<3, /* =1, 64-bit operand size */
219 Rxr = 1<<2, /* extend modrm reg */
220 Rxx = 1<<1, /* extend sib index */
221 Rxb = 1<<0, /* extend modrm r/m, sib base, or opcode reg */
223 Roffset = 22, /* no. bits for offset in relocation address */
224 Rindex = 10, /* no. bits for index in relocation address */
231 char obuf[MAXIO]; /* output buffer */
232 uchar ibuf[MAXIO]; /* input buffer */
240 #pragma varargck type "A" int
241 #pragma varargck type "A" uint
242 #pragma varargck type "D" Adr*
243 #pragma varargck type "P" Prog*
244 #pragma varargck type "R" int
245 #pragma varargck type "S" char*
247 #pragma varargck argpos diag 1
250 EXTERN long HEADTYPE;
251 EXTERN vlong INITDAT;
253 EXTERN vlong INITTEXT;
254 EXTERN char* INITENTRY; /* entry point */
261 EXTERN Auto* curauto;
262 EXTERN Auto* curhist;
264 EXTERN Prog* curtext;
267 EXTERN vlong datsize;
268 EXTERN char debug[128];
269 EXTERN char literal[32];
272 EXTERN uchar fnuxi8[8];
273 EXTERN uchar fnuxi4[4];
274 EXTERN Sym* hash[NHASH];
275 EXTERN Sym* histfrog[MAXHIST];
276 EXTERN int histfrogp;
278 EXTERN char* library[50];
279 EXTERN char* libraryobj[50];
281 EXTERN int xrefresolv;
283 EXTERN uchar inuxi1[1];
284 EXTERN uchar inuxi2[2];
285 EXTERN uchar inuxi4[4];
286 EXTERN uchar inuxi8[8];
287 EXTERN char ycover[Ymax*Ymax];
288 EXTERN uchar* andptr;
289 EXTERN uchar* rexptr;
290 EXTERN uchar and[30];
291 EXTERN int reg[D_NONE];
292 EXTERN int regrex[D_NONE+1];
299 EXTERN char* outfile;
305 EXTERN vlong textsize;
306 EXTERN uintptr thunk;
310 EXTERN char* paramspace;
313 EXTERN int doexp, dlm;
314 EXTERN int imports, nimports;
315 EXTERN int exports, nexports;
321 extern Optab optab[];
322 extern Optab* opindex[];
323 extern char* anames[];
330 void addhist(long, int);
331 Prog* appendp(Prog*);
338 vlong atolwhex(char*);
339 Prog* brchain(Prog*);
343 void ckoff(Sym*, long);
345 double cputime(void);
346 void datblk(long, long);
347 void diag(char*, ...);
353 void dynreloc(Sym*, ulong, int);
354 vlong entryvalue(void);
355 void errorexit(void);
357 int find1(long, int);
358 int find1v(vlong, int);
359 int find2(long, int);
362 void histtoauto(void);
363 double ieeedtod(Ieee*);
364 long ieeedtof(Ieee*);
366 void ldobj(int, long, char*);
369 Sym* lookup(char*, int);
372 void main(int, char*[]);
380 void readundefs(char*, int);
382 long reuse(Prog*, Sym*);
383 vlong rnd(vlong, vlong);
389 void xdefine(char*, int, vlong);
391 int zaddr(uchar*, Adr*, Sym*[]);