4 #include "../5c/5.out.h"
10 #define LIBNAMELEN 300
12 void addlibpath(char*);
13 int fileexists(char*);
16 typedef struct Adr Adr;
17 typedef struct Sym Sym;
18 typedef struct Autom Auto;
19 typedef struct Prog Prog;
20 typedef struct Optab Optab;
21 typedef struct Oprang Oprang;
22 typedef uchar Opcross[32][2][32];
23 typedef struct Count Count;
27 #define TNAME (curtext&&curtext->from.sym?curtext->from.sym->name:noname)
48 #define offset u0.u0offset
49 #define sval u0.u0sval
50 #define ieee u0.u0ieee
52 #define autom u1.u1autom
74 #define regused u0.u0regused
75 #define forwd u0.u0forwd
92 #define SIGNINTERN (1729*325*1729)
142 V4 = 1<<3, /* arm v4 arch */
143 VFP = 1<<4, /* arm vfpv3 floating point */
153 C_RCON, /* 0xff rotated */
168 C_HAUTO, /* halfword insn offset (-0xff to 0xff) */
169 C_FAUTO, /* float insn offset (0 to 0x3fc, word aligned) */
170 C_HFAUTO, /* both H and F */
171 C_SAUTO, /* -0xfff to 0xfff */
185 C_SROREG, /* both S and R */
188 C_ADDR, /* relocatable address */
204 MAXHIST = 20, /* limit of path elements for history symbols */
206 Roffset = 22, /* no. bits for offset in relocation address */
207 Rindex = 10, /* no. bits for index in relocation address */
214 uchar obuf[MAXIO]; /* output buffer */
215 uchar ibuf[MAXIO]; /* input buffer */
223 EXTERN long HEADR; /* length of header */
224 EXTERN int HEADTYPE; /* type of header */
225 EXTERN long INITDAT; /* data location */
226 EXTERN long INITRND; /* data round above text location */
227 EXTERN long INITTEXT; /* text location */
228 EXTERN char* INITENTRY; /* entry point */
229 EXTERN long autosize;
235 EXTERN Auto* curauto;
236 EXTERN Auto* curhist;
238 EXTERN Prog* curtext;
241 EXTERN char debug[128];
244 EXTERN char fnuxi4[4];
245 EXTERN char fnuxi8[8];
247 EXTERN Sym* hash[NHASH];
248 EXTERN Sym* histfrog[MAXHIST];
249 EXTERN int histfrogp;
251 EXTERN char* library[50];
252 EXTERN char* libraryobj[50];
254 EXTERN int xrefresolv;
256 EXTERN char inuxi1[1];
257 EXTERN char inuxi2[2];
258 EXTERN char inuxi4[4];
261 EXTERN char literal[32];
264 EXTERN long instoffset;
265 EXTERN Opcross opcross[8];
266 EXTERN Oprang oprange[ALAST];
267 EXTERN char* outfile;
269 EXTERN uchar repop[ALAST];
272 EXTERN long textsize;
275 EXTERN char xcmp[C_GOK+1][C_GOK+1];
281 EXTERN int doexp, dlm;
282 EXTERN int imports, nimports;
283 EXTERN int exports, nexports;
289 extern char* anames[];
290 extern Optab optab[];
292 void addpool(Prog*, Adr*);
297 EXTERN Prog* prog_div;
298 EXTERN Prog* prog_divu;
299 EXTERN Prog* prog_mod;
300 EXTERN Prog* prog_modu;
302 #pragma varargck type "A" int
303 #pragma varargck type "A" uint
304 #pragma varargck type "C" int
305 #pragma varargck type "D" Adr*
306 #pragma varargck type "N" Adr*
307 #pragma varargck type "P" Prog*
308 #pragma varargck type "S" char*
310 #pragma varargck argpos diag 1
319 void addhist(long, int);
320 void addlibpath(char*);
321 void append(Prog*, Prog*);
325 void asmout(Prog*, Optab*);
327 long atolwhex(char*);
330 void buildrep(int, int);
332 void ckoff(Sym*, long);
333 int chipfloat(Ieee*);
336 double cputime(void);
337 void datblk(long, long, int);
338 void diag(char*, ...);
343 void dynreloc(Sym*, long, int);
344 long entryvalue(void);
345 void errorexit(void);
346 void exchange(Prog*);
348 int fileexists(char*);
349 int find1(long, int);
350 char* findlib(char*);
353 void histtoauto(void);
354 double ieeedtod(Ieee*);
355 long ieeedtof(Ieee*);
358 void ldobj(int, long, char*);
361 Sym* lookup(char*, int);
371 int ocmp(const void*, const void*);
373 Optab* oplook(Prog*);
374 long oprrr(int, int);
375 long opvfprrr(int, int);
376 long olr(long, int, int, int);
377 long olhr(long, int, int, int);
378 long olrr(int, int, int, int);
379 long olhrr(int, int, int, int);
380 long osr(int, int, long, int, int);
381 long oshr(int, long, int, int);
382 long ofsr(int, int, long, int, int, Prog*);
383 long osrr(int, int, int, int);
384 long oshrr(int, int, int, int);
385 long omvl(Prog*, Adr*, int);
388 void prepend(Prog*, Prog*);
391 void putsymb(char*, int, long, int);
392 void readundefs(char*, int);
395 long rnd(long, long);
397 void strnput(char*, int);
401 void xdefine(char*, int, long);
407 long opbra(int, int);