struct Adr
{
short type;
short index;
union
{
struct
{
long u0displace;
long u0offset;
} s0;
char u0scon[8];
Prog *u0cond; /* not used, but should be D_BRANCH */
Ieee u0ieee;
} u0;
union
{
Auto* u1autom;
Sym* u1sym;
} u1;
uchar field;
uchar scale;
};
struct Prog
{
Adr from;
Adr to;
union
{
long u0stkoff;
Prog *u0forwd;
} u0;
Prog* link;
Prog* pcond; /* work on this */
long pc;
long line;
short as;
uchar mark; /* work on these */
uchar back;
};
struct Auto
{
Sym* asym;
Auto* link;
long aoffset;
short type;
};
struct Sym
{
char *name;
short type;
short version;
short become;
short frame;
long value;
Sym* link;
};
struct Optab
{
short as;
short fas;
short srcsp;
short dstsp;
ushort optype;
ushort opcode0;
ushort opcode1;
ushort opcode2;
ushort opcode3;
};
#pragma varargck type "A" int
#pragma varargck type "D" Adr*
#pragma varargck type "P" Prog*
#pragma varargck type "R" int
#pragma varargck type "S" char*
#pragma varargck argpos diag 1
int Aconv(Fmt*);
int Dconv(Fmt*);
int Pconv(Fmt*);
int Rconv(Fmt*);
int Sconv(Fmt*);
int Xconv(Fmt*);
void addhist(long, int);
int andsize(Prog*, Adr*);
Prog* appendp(Prog*);
void asmb(void);
int asmea(Prog*, Adr*);
void asmins(Prog*);
void asmlc(void);
void asmsp(void);
void asmsym(void);
long atolwhex(char*);
Prog* brchain(Prog*);
Prog* brloop(Prog*);
void cflush(void);
Prog* copyp(Prog*);
double cputime(void);
void datblk(long, long);
void diag(char*, ...);
void dodata(void);
void doprof1(void);
void doprof2(void);
void dostkoff(void);
long entryvalue(void);
void errorexit(void);
int find1(long, int);
int find2(long, int);
void follow(void);
int gnuxi(Ieee*, int, int);
void histtoauto(void);
double ieeedtod(Ieee*);
long ieeedtof(Ieee*);
void ldobj(int, long, char*);
void loadlib(void);
void listinit(void);
Sym* lookup(char*, int);
void lput(long);
void main(int, char*[]);
void mkfwd(void);
void nuxiinit(void);
void objfile(char*);
void patch(void);
Prog* prg(void);
int relinv(int);
long reuse(Prog*, Sym*);
long rnd(long, long);
void s16put(char*);
void span(void);
void undef(void);
void xdefine(char*, int, long);
void xfol(Prog*);
int zaddr(uchar*, Adr*, Sym*[]);