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 */
124 MAXHIST = 20, /* limit of path elements for history symbols */
150 Ycs, Yss, Yds, Yes, Yfs, Ygs,
151 Ygdtr, Yidtr, Yldtr, Ymsw, Ytask,
152 Ycr0, Ycr1, Ycr2, Ycr3, Ycr4, Ycr5, Ycr6, Ycr7, Ycr8,
153 Ydr0, Ydr1, Ydr2, Ydr3, Ydr4, Ydr5, Ydr6, Ydr7,
154 Ytr0, Ytr1, Ytr2, Ytr3, Ytr4, Ytr5, Ytr6, Ytr7, Yrl32, Yrl64,
184 Zibm_r, /* mmx1,mmx2/mem64,imm8 */
205 P32 = 0x32, /* 32-bit only */
206 Pe = 0x66, /* operand escape */
207 Pm = 0x0f, /* 2byte opcode escape */
208 Pq = 0xff, /* both escape */
209 Pb = 0xfe, /* byte operands */
210 Pf2 = 0xf2, /* xmm escape 1 */
211 Pf3 = 0xf3, /* xmm escape 2 */
212 Pw = 0x48, /* Rex.w */
213 Py = 0x80, /* defaults to 64-bit mode */
215 Rxf = 1<<9, /* internal flag for Rxr on from */
216 Rxt = 1<<8, /* internal flag for Rxr on to */
217 Rxw = 1<<3, /* =1, 64-bit operand size */
218 Rxr = 1<<2, /* extend modrm reg */
219 Rxx = 1<<1, /* extend sib index */
220 Rxb = 1<<0, /* extend modrm r/m, sib base, or opcode reg */
222 Roffset = 22, /* no. bits for offset in relocation address */
223 Rindex = 10, /* no. bits for index in relocation address */
230 char obuf[MAXIO]; /* output buffer */
231 uchar ibuf[MAXIO]; /* input buffer */
239 #pragma varargck type "A" int
240 #pragma varargck type "A" uint
241 #pragma varargck type "D" Adr*
242 #pragma varargck type "P" Prog*
243 #pragma varargck type "R" int
244 #pragma varargck type "S" char*
246 #pragma varargck argpos diag 1
249 EXTERN long HEADTYPE;
250 EXTERN vlong INITDAT;
252 EXTERN vlong INITTEXT;
253 EXTERN char* INITENTRY; /* entry point */
260 EXTERN Auto* curauto;
261 EXTERN Auto* curhist;
263 EXTERN Prog* curtext;
266 EXTERN vlong datsize;
267 EXTERN char debug[128];
268 EXTERN char literal[32];
271 EXTERN uchar fnuxi8[8];
272 EXTERN uchar fnuxi4[4];
273 EXTERN Sym* hash[NHASH];
274 EXTERN Sym* histfrog[MAXHIST];
275 EXTERN int histfrogp;
277 EXTERN char* library[50];
278 EXTERN char* libraryobj[50];
280 EXTERN int xrefresolv;
282 EXTERN uchar inuxi1[1];
283 EXTERN uchar inuxi2[2];
284 EXTERN uchar inuxi4[4];
285 EXTERN uchar inuxi8[8];
286 EXTERN char ycover[Ymax*Ymax];
287 EXTERN uchar* andptr;
288 EXTERN uchar* rexptr;
289 EXTERN uchar and[30];
290 EXTERN int reg[D_NONE];
291 EXTERN int regrex[D_NONE+1];
298 EXTERN char* outfile;
304 EXTERN vlong textsize;
309 EXTERN char* paramspace;
312 EXTERN int doexp, dlm;
313 EXTERN int imports, nimports;
314 EXTERN int exports, nexports;
320 extern Optab optab[];
321 extern Optab* opindex[];
322 extern char* anames[];
329 void addhist(long, int);
330 Prog* appendp(Prog*);
337 vlong atolwhex(char*);
338 Prog* brchain(Prog*);
342 void ckoff(Sym*, long);
344 double cputime(void);
345 void datblk(long, long);
346 void diag(char*, ...);
352 void dynreloc(Sym*, ulong, int);
353 vlong entryvalue(void);
354 void errorexit(void);
356 int find1(long, int);
357 int find2(long, int);
360 void histtoauto(void);
361 double ieeedtod(Ieee*);
362 long ieeedtof(Ieee*);
364 void ldobj(int, long, char*);
367 Sym* lookup(char*, int);
370 void main(int, char*[]);
378 void readundefs(char*, int);
380 long reuse(Prog*, Sym*);
381 vlong rnd(vlong, vlong);
387 void xdefine(char*, int, vlong);
389 int zaddr(uchar*, Adr*, Sym*[]);