xref: /plan9-contrib/sys/src/cmd/il/l.h (revision ce95e1b3727b9cb1c223ffbed69aff21a8ced255)
1*ce95e1b3SDavid du Colombier #include	<u.h>
2*ce95e1b3SDavid du Colombier #include	<libc.h>
3*ce95e1b3SDavid du Colombier #include	<bio.h>
4*ce95e1b3SDavid du Colombier #include	"../ic/i.out.h"
5*ce95e1b3SDavid du Colombier #include	"../8l/elf.h"
6*ce95e1b3SDavid du Colombier 
7*ce95e1b3SDavid du Colombier #ifndef	EXTERN
8*ce95e1b3SDavid du Colombier #define	EXTERN	extern
9*ce95e1b3SDavid du Colombier #endif
10*ce95e1b3SDavid du Colombier 
11*ce95e1b3SDavid du Colombier typedef vlong xlong;
12*ce95e1b3SDavid du Colombier 
13*ce95e1b3SDavid du Colombier typedef	struct	Adr	Adr;
14*ce95e1b3SDavid du Colombier typedef	struct	Sym	Sym;
15*ce95e1b3SDavid du Colombier typedef	struct	Autom	Auto;
16*ce95e1b3SDavid du Colombier typedef	struct	Prog	Prog;
17*ce95e1b3SDavid du Colombier typedef	struct	Optab	Optab;
18*ce95e1b3SDavid du Colombier typedef	struct	Oprang	Oprang;
19*ce95e1b3SDavid du Colombier typedef	uchar	Opcross[32][32];
20*ce95e1b3SDavid du Colombier typedef	struct	Count	Count;
21*ce95e1b3SDavid du Colombier 
22*ce95e1b3SDavid du Colombier #define	P		((Prog*)0)
23*ce95e1b3SDavid du Colombier #define	S		((Sym*)0)
24*ce95e1b3SDavid du Colombier #define	TNAME		(curtext&&curtext->from.sym?curtext->from.sym->name:noname)
25*ce95e1b3SDavid du Colombier 
26*ce95e1b3SDavid du Colombier struct	Adr
27*ce95e1b3SDavid du Colombier {
28*ce95e1b3SDavid du Colombier 	union
29*ce95e1b3SDavid du Colombier 	{
30*ce95e1b3SDavid du Colombier 		long	u0offset;
31*ce95e1b3SDavid du Colombier 		char*	u0sval;
32*ce95e1b3SDavid du Colombier 		Ieee*	u0ieee;
33*ce95e1b3SDavid du Colombier 		vlong*	u0vval;
34*ce95e1b3SDavid du Colombier 	} u0;
35*ce95e1b3SDavid du Colombier 	union
36*ce95e1b3SDavid du Colombier 	{
37*ce95e1b3SDavid du Colombier 		Auto*	u1autom;
38*ce95e1b3SDavid du Colombier 		Sym*	u1sym;
39*ce95e1b3SDavid du Colombier 	} u1;
40*ce95e1b3SDavid du Colombier 	char	type;
41*ce95e1b3SDavid du Colombier 	char	reg;
42*ce95e1b3SDavid du Colombier 	char	name;
43*ce95e1b3SDavid du Colombier 	char	class;
44*ce95e1b3SDavid du Colombier };
45*ce95e1b3SDavid du Colombier 
46*ce95e1b3SDavid du Colombier #define	offset	u0.u0offset
47*ce95e1b3SDavid du Colombier #define	sval	u0.u0sval
48*ce95e1b3SDavid du Colombier #define	ieee	u0.u0ieee
49*ce95e1b3SDavid du Colombier #define	vval	u0.u0vval
50*ce95e1b3SDavid du Colombier 
51*ce95e1b3SDavid du Colombier #define	autom	u1.u1autom
52*ce95e1b3SDavid du Colombier #define	sym	u1.u1sym
53*ce95e1b3SDavid du Colombier 
54*ce95e1b3SDavid du Colombier struct	Prog
55*ce95e1b3SDavid du Colombier {
56*ce95e1b3SDavid du Colombier 	Adr	from;
57*ce95e1b3SDavid du Colombier 	Adr	to;
58*ce95e1b3SDavid du Colombier 	union
59*ce95e1b3SDavid du Colombier 	{
60*ce95e1b3SDavid du Colombier 		long	u0regused;
61*ce95e1b3SDavid du Colombier 		Prog*	u0forwd;
62*ce95e1b3SDavid du Colombier 	} u0;
63*ce95e1b3SDavid du Colombier 	Prog*	cond;
64*ce95e1b3SDavid du Colombier 	Prog*	link;
65*ce95e1b3SDavid du Colombier 	long	pc;
66*ce95e1b3SDavid du Colombier 	long	line;
67*ce95e1b3SDavid du Colombier 	uchar	mark;
68*ce95e1b3SDavid du Colombier 	uchar	optab;
69*ce95e1b3SDavid du Colombier 	char	as;
70*ce95e1b3SDavid du Colombier 	char	reg;
71*ce95e1b3SDavid du Colombier };
72*ce95e1b3SDavid du Colombier #define	regused	u0.u0regused
73*ce95e1b3SDavid du Colombier #define	forwd	u0.u0forwd
74*ce95e1b3SDavid du Colombier 
75*ce95e1b3SDavid du Colombier struct	Sym
76*ce95e1b3SDavid du Colombier {
77*ce95e1b3SDavid du Colombier 	char	*name;
78*ce95e1b3SDavid du Colombier 	short	type;
79*ce95e1b3SDavid du Colombier 	short	version;
80*ce95e1b3SDavid du Colombier 	short	become;
81*ce95e1b3SDavid du Colombier 	short	frame;
82*ce95e1b3SDavid du Colombier 	ushort	file;
83*ce95e1b3SDavid du Colombier 	long	value;
84*ce95e1b3SDavid du Colombier 	long	sig;
85*ce95e1b3SDavid du Colombier 	Sym*	link;
86*ce95e1b3SDavid du Colombier };
87*ce95e1b3SDavid du Colombier struct	Autom
88*ce95e1b3SDavid du Colombier {
89*ce95e1b3SDavid du Colombier 	Sym*	asym;
90*ce95e1b3SDavid du Colombier 	Auto*	link;
91*ce95e1b3SDavid du Colombier 	long	aoffset;
92*ce95e1b3SDavid du Colombier 	short	type;
93*ce95e1b3SDavid du Colombier };
94*ce95e1b3SDavid du Colombier struct	Optab
95*ce95e1b3SDavid du Colombier {
96*ce95e1b3SDavid du Colombier 	char	as;
97*ce95e1b3SDavid du Colombier 	char	a1;
98*ce95e1b3SDavid du Colombier 	char	a3;
99*ce95e1b3SDavid du Colombier 	char	type;
100*ce95e1b3SDavid du Colombier 	char	ctype;
101*ce95e1b3SDavid du Colombier 	char	size;
102*ce95e1b3SDavid du Colombier 	char	op;
103*ce95e1b3SDavid du Colombier 	char	func3;
104*ce95e1b3SDavid du Colombier 	short	param;
105*ce95e1b3SDavid du Colombier };
106*ce95e1b3SDavid du Colombier struct	Oprang
107*ce95e1b3SDavid du Colombier {
108*ce95e1b3SDavid du Colombier 	Optab*	start;
109*ce95e1b3SDavid du Colombier 	Optab*	stop;
110*ce95e1b3SDavid du Colombier };
111*ce95e1b3SDavid du Colombier struct	Count
112*ce95e1b3SDavid du Colombier {
113*ce95e1b3SDavid du Colombier 	long	count;
114*ce95e1b3SDavid du Colombier 	long	outof;
115*ce95e1b3SDavid du Colombier };
116*ce95e1b3SDavid du Colombier 
117*ce95e1b3SDavid du Colombier enum
118*ce95e1b3SDavid du Colombier {
119*ce95e1b3SDavid du Colombier 	STEXT		= 1,
120*ce95e1b3SDavid du Colombier 	SDATA,
121*ce95e1b3SDavid du Colombier 	SBSS,
122*ce95e1b3SDavid du Colombier 	SDATA1,
123*ce95e1b3SDavid du Colombier 	SXREF,
124*ce95e1b3SDavid du Colombier 	SLEAF,
125*ce95e1b3SDavid du Colombier 	SFILE,
126*ce95e1b3SDavid du Colombier 	SCONST,
127*ce95e1b3SDavid du Colombier 	SSTRING,
128*ce95e1b3SDavid du Colombier 
129*ce95e1b3SDavid du Colombier 	C_NONE		= 0,
130*ce95e1b3SDavid du Colombier 	C_REG,
131*ce95e1b3SDavid du Colombier 	C_CTLREG,
132*ce95e1b3SDavid du Colombier 	C_FREG,
133*ce95e1b3SDavid du Colombier 	C_ZREG,
134*ce95e1b3SDavid du Colombier 	C_ZCON,
135*ce95e1b3SDavid du Colombier 	C_SCON,
136*ce95e1b3SDavid du Colombier 	C_UCON,
137*ce95e1b3SDavid du Colombier 	C_LCON,
138*ce95e1b3SDavid du Colombier 	C_VCON,
139*ce95e1b3SDavid du Colombier 	C_FCON,
140*ce95e1b3SDavid du Colombier 	C_SACON,
141*ce95e1b3SDavid du Colombier 	C_SECON,
142*ce95e1b3SDavid du Colombier 	C_LACON,
143*ce95e1b3SDavid du Colombier 	C_LECON,
144*ce95e1b3SDavid du Colombier 	C_SRCON,
145*ce95e1b3SDavid du Colombier 	C_LRCON,
146*ce95e1b3SDavid du Colombier 	C_SBRA,
147*ce95e1b3SDavid du Colombier 	C_LBRA,
148*ce95e1b3SDavid du Colombier 	C_SAUTO,
149*ce95e1b3SDavid du Colombier 	C_ZOREG,
150*ce95e1b3SDavid du Colombier 	C_SOREG,
151*ce95e1b3SDavid du Colombier 	C_LOREG,
152*ce95e1b3SDavid du Colombier 	C_LAUTO,
153*ce95e1b3SDavid du Colombier 	C_SEXT,
154*ce95e1b3SDavid du Colombier 	C_LEXT,
155*ce95e1b3SDavid du Colombier 	C_GOK,
156*ce95e1b3SDavid du Colombier 
157*ce95e1b3SDavid du Colombier 	NSCHED		= 20,
158*ce95e1b3SDavid du Colombier 
159*ce95e1b3SDavid du Colombier /* mark flags */
160*ce95e1b3SDavid du Colombier 	FOLL		= 1<<0,
161*ce95e1b3SDavid du Colombier 	LABEL		= 1<<1,
162*ce95e1b3SDavid du Colombier 	LEAF		= 1<<2,
163*ce95e1b3SDavid du Colombier 	SYNC		= 1<<3,
164*ce95e1b3SDavid du Colombier 	BRANCH		= 1<<4,
165*ce95e1b3SDavid du Colombier 	COMPR		= 1<<5,
166*ce95e1b3SDavid du Colombier 	SPASS		= 1<<6,
167*ce95e1b3SDavid du Colombier 
168*ce95e1b3SDavid du Colombier 	BIG		= 2048,
169*ce95e1b3SDavid du Colombier 	STRINGSZ	= 200,
170*ce95e1b3SDavid du Colombier 	NHASH		= 10007,
171*ce95e1b3SDavid du Colombier 	NHUNK		= 100000,
172*ce95e1b3SDavid du Colombier 	MINSIZ		= 64,
173*ce95e1b3SDavid du Colombier 	NENT		= 100,
174*ce95e1b3SDavid du Colombier 	MAXIO		= 8192,
175*ce95e1b3SDavid du Colombier 	MAXHIST		= 20,				/* limit of path elements for history symbols */
176*ce95e1b3SDavid du Colombier };
177*ce95e1b3SDavid du Colombier 
178*ce95e1b3SDavid du Colombier /* Major opcodes */
179*ce95e1b3SDavid du Colombier enum {
180*ce95e1b3SDavid du Colombier 	OLOAD,	 OLOAD_FP,  Ocustom_0,	OMISC_MEM, OOP_IMM, OAUIPC, OOP_IMM_32,	O48b,
181*ce95e1b3SDavid du Colombier 	OSTORE,	 OSTORE_FP, Ocustom_1,	OAMO,	   OOP,	    OLUI,   OOP_32,	O64b,
182*ce95e1b3SDavid du Colombier 	OMADD,	 OMSUB,	    ONMSUB,	ONMADD,	   OOP_FP,  Ores_0, Ocustom_2,	O48b_2,
183*ce95e1b3SDavid du Colombier 	OBRANCH, OJALR,	    Ores_1,	OJAL,	   OSYSTEM, Ores_2, Ocustom_3,	O80b
184*ce95e1b3SDavid du Colombier };
185*ce95e1b3SDavid du Colombier 
186*ce95e1b3SDavid du Colombier EXTERN union
187*ce95e1b3SDavid du Colombier {
188*ce95e1b3SDavid du Colombier 	struct
189*ce95e1b3SDavid du Colombier 	{
190*ce95e1b3SDavid du Colombier 		uchar	obuf[MAXIO];			/* output buffer */
191*ce95e1b3SDavid du Colombier 		uchar	ibuf[MAXIO];			/* input buffer */
192*ce95e1b3SDavid du Colombier 	} u;
193*ce95e1b3SDavid du Colombier 	char	dbuf[1];
194*ce95e1b3SDavid du Colombier } buf;
195*ce95e1b3SDavid du Colombier 
196*ce95e1b3SDavid du Colombier #define	cbuf	u.obuf
197*ce95e1b3SDavid du Colombier #define	xbuf	u.ibuf
198*ce95e1b3SDavid du Colombier 
199*ce95e1b3SDavid du Colombier EXTERN	long	HEADR;			/* length of header */
200*ce95e1b3SDavid du Colombier EXTERN	int	HEADTYPE;		/* type of header */
201*ce95e1b3SDavid du Colombier EXTERN	xlong	INITDAT;		/* data location */
202*ce95e1b3SDavid du Colombier EXTERN	xlong	INITRND;		/* data round above text location */
203*ce95e1b3SDavid du Colombier EXTERN	xlong	INITTEXT;		/* text location */
204*ce95e1b3SDavid du Colombier EXTERN	xlong	INITTEXTP;		/* text location (physical) */
205*ce95e1b3SDavid du Colombier EXTERN	char*	INITENTRY;		/* entry point */
206*ce95e1b3SDavid du Colombier EXTERN	long	autosize;
207*ce95e1b3SDavid du Colombier EXTERN	Biobuf	bso;
208*ce95e1b3SDavid du Colombier EXTERN	long	bsssize;
209*ce95e1b3SDavid du Colombier EXTERN	int	cbc;
210*ce95e1b3SDavid du Colombier EXTERN	uchar*	cbp;
211*ce95e1b3SDavid du Colombier EXTERN	int	cout;
212*ce95e1b3SDavid du Colombier EXTERN	Auto*	curauto;
213*ce95e1b3SDavid du Colombier EXTERN	Auto*	curhist;
214*ce95e1b3SDavid du Colombier EXTERN	Prog*	curp;
215*ce95e1b3SDavid du Colombier EXTERN	Prog*	curtext;
216*ce95e1b3SDavid du Colombier EXTERN	Prog*	datap;
217*ce95e1b3SDavid du Colombier EXTERN	long	datsize;
218*ce95e1b3SDavid du Colombier EXTERN	char	debug[128];
219*ce95e1b3SDavid du Colombier EXTERN	Prog*	etextp;
220*ce95e1b3SDavid du Colombier EXTERN	Prog*	firstp;
221*ce95e1b3SDavid du Colombier EXTERN	char	fnuxi4[4];	/* for 3l [sic] */
222*ce95e1b3SDavid du Colombier EXTERN	char	fnuxi8[8];
223*ce95e1b3SDavid du Colombier EXTERN	char*	noname;
224*ce95e1b3SDavid du Colombier EXTERN	Sym*	hash[NHASH];
225*ce95e1b3SDavid du Colombier EXTERN	Sym*	histfrog[MAXHIST];
226*ce95e1b3SDavid du Colombier EXTERN	int	histfrogp;
227*ce95e1b3SDavid du Colombier EXTERN	int	histgen;
228*ce95e1b3SDavid du Colombier EXTERN	char*	library[50];
229*ce95e1b3SDavid du Colombier EXTERN	char*	libraryobj[50];
230*ce95e1b3SDavid du Colombier EXTERN	int	libraryp;
231*ce95e1b3SDavid du Colombier EXTERN	int	xrefresolv;
232*ce95e1b3SDavid du Colombier EXTERN	char*	hunk;
233*ce95e1b3SDavid du Colombier EXTERN	char	inuxi1[1];
234*ce95e1b3SDavid du Colombier EXTERN	char	inuxi2[2];
235*ce95e1b3SDavid du Colombier EXTERN	char	inuxi4[4];
236*ce95e1b3SDavid du Colombier EXTERN	char	inuxi8[8];
237*ce95e1b3SDavid du Colombier EXTERN	Prog*	lastp;
238*ce95e1b3SDavid du Colombier EXTERN	long	lcsize;
239*ce95e1b3SDavid du Colombier EXTERN	char	literal[32];
240*ce95e1b3SDavid du Colombier EXTERN	int	nerrors;
241*ce95e1b3SDavid du Colombier EXTERN	long	nhunk;
242*ce95e1b3SDavid du Colombier EXTERN	Prog	nopalign;
243*ce95e1b3SDavid du Colombier EXTERN	long	instoffset;
244*ce95e1b3SDavid du Colombier EXTERN	vlong	instoffx;
245*ce95e1b3SDavid du Colombier EXTERN	Opcross	opcross[10];
246*ce95e1b3SDavid du Colombier EXTERN	Oprang	oprange[ALAST];
247*ce95e1b3SDavid du Colombier EXTERN	char*	outfile;
248*ce95e1b3SDavid du Colombier EXTERN	long	pc;
249*ce95e1b3SDavid du Colombier EXTERN	int	ptrsize;
250*ce95e1b3SDavid du Colombier EXTERN	uchar	repop[ALAST];
251*ce95e1b3SDavid du Colombier EXTERN	long	symsize;
252*ce95e1b3SDavid du Colombier EXTERN	Prog*	textp;
253*ce95e1b3SDavid du Colombier EXTERN	long	textsize;
254*ce95e1b3SDavid du Colombier EXTERN	long	thunk;
255*ce95e1b3SDavid du Colombier EXTERN	int	version;
256*ce95e1b3SDavid du Colombier EXTERN	char	xcmp[32][32];
257*ce95e1b3SDavid du Colombier EXTERN	Prog	zprg;
258*ce95e1b3SDavid du Colombier EXTERN	int	dtype;
259*ce95e1b3SDavid du Colombier EXTERN	int	little;
260*ce95e1b3SDavid du Colombier 
261*ce95e1b3SDavid du Colombier EXTERN	struct
262*ce95e1b3SDavid du Colombier {
263*ce95e1b3SDavid du Colombier 	Count	branch;
264*ce95e1b3SDavid du Colombier 	Count	fcmp;
265*ce95e1b3SDavid du Colombier 	Count	load;
266*ce95e1b3SDavid du Colombier 	Count	mfrom;
267*ce95e1b3SDavid du Colombier 	Count	page;
268*ce95e1b3SDavid du Colombier 	Count	jump;
269*ce95e1b3SDavid du Colombier } nop;
270*ce95e1b3SDavid du Colombier 
271*ce95e1b3SDavid du Colombier extern	char*	anames[];
272*ce95e1b3SDavid du Colombier extern	Optab	optab[];
273*ce95e1b3SDavid du Colombier extern	char	thechar;
274*ce95e1b3SDavid du Colombier 
275*ce95e1b3SDavid du Colombier #pragma	varargck	type	"A"	int
276*ce95e1b3SDavid du Colombier #pragma	varargck	type	"D"	Adr*
277*ce95e1b3SDavid du Colombier #pragma	varargck	type	"N"	Adr*
278*ce95e1b3SDavid du Colombier #pragma	varargck	type	"P"	Prog*
279*ce95e1b3SDavid du Colombier #pragma	varargck	type	"S"	char*
280*ce95e1b3SDavid du Colombier 
281*ce95e1b3SDavid du Colombier #pragma	varargck	argpos	diag 1
282*ce95e1b3SDavid du Colombier 
283*ce95e1b3SDavid du Colombier int	Aconv(Fmt*);
284*ce95e1b3SDavid du Colombier int	Dconv(Fmt*);
285*ce95e1b3SDavid du Colombier int	Nconv(Fmt*);
286*ce95e1b3SDavid du Colombier int	Pconv(Fmt*);
287*ce95e1b3SDavid du Colombier int	Sconv(Fmt*);
288*ce95e1b3SDavid du Colombier int	aclass(Adr*);
289*ce95e1b3SDavid du Colombier void	addhist(long, int);
290*ce95e1b3SDavid du Colombier void	append(Prog*, Prog*);
291*ce95e1b3SDavid du Colombier void	asmb(void);
292*ce95e1b3SDavid du Colombier int	asmcompressed(Prog*, Optab*, int, int);
293*ce95e1b3SDavid du Colombier void	asmlc(void);
294*ce95e1b3SDavid du Colombier int	asmout(Prog*, Optab*, int);
295*ce95e1b3SDavid du Colombier void	asmsym(void);
296*ce95e1b3SDavid du Colombier vlong	atolwhex(char*);
297*ce95e1b3SDavid du Colombier Prog*	brloop(Prog*);
298*ce95e1b3SDavid du Colombier void	buildop(void);
299*ce95e1b3SDavid du Colombier void	buildrep(int, int);
300*ce95e1b3SDavid du Colombier void	cflush(void);
301*ce95e1b3SDavid du Colombier int	cmp(int, int);
302*ce95e1b3SDavid du Colombier int	compound(Prog*);
303*ce95e1b3SDavid du Colombier double	cputime(void);
304*ce95e1b3SDavid du Colombier void	datblk(long, long, int);
305*ce95e1b3SDavid du Colombier void	diag(char*, ...);
306*ce95e1b3SDavid du Colombier void	dodata(void);
307*ce95e1b3SDavid du Colombier void	doprof1(void);
308*ce95e1b3SDavid du Colombier void	doprof2(void);
309*ce95e1b3SDavid du Colombier vlong	entryvalue(void);
310*ce95e1b3SDavid du Colombier void	errorexit(void);
311*ce95e1b3SDavid du Colombier void	exchange(Prog*);
312*ce95e1b3SDavid du Colombier int	find1(long, int);
313*ce95e1b3SDavid du Colombier void	follow(void);
314*ce95e1b3SDavid du Colombier void	gethunk(void);
315*ce95e1b3SDavid du Colombier void	histtoauto(void);
316*ce95e1b3SDavid du Colombier double	ieeedtod(Ieee*);
317*ce95e1b3SDavid du Colombier long	ieeedtof(Ieee*);
318*ce95e1b3SDavid du Colombier int	isnop(Prog*);
319*ce95e1b3SDavid du Colombier void	ldobj(int, long, char*);
320*ce95e1b3SDavid du Colombier void	loadlib(void);
321*ce95e1b3SDavid du Colombier void	listinit(void);
322*ce95e1b3SDavid du Colombier Sym*	lookup(char*, int);
323*ce95e1b3SDavid du Colombier void	cput(int);
324*ce95e1b3SDavid du Colombier void	llput(vlong);
325*ce95e1b3SDavid du Colombier void	llputl(vlong);
326*ce95e1b3SDavid du Colombier void	lput(long);
327*ce95e1b3SDavid du Colombier void	lputl(long);
328*ce95e1b3SDavid du Colombier void	bput(long);
329*ce95e1b3SDavid du Colombier void	mkfwd(void);
330*ce95e1b3SDavid du Colombier void*	mysbrk(ulong);
331*ce95e1b3SDavid du Colombier void	names(void);
332*ce95e1b3SDavid du Colombier void	nocache(Prog*);
333*ce95e1b3SDavid du Colombier void	noops(void);
334*ce95e1b3SDavid du Colombier void	nuxiinit(void);
335*ce95e1b3SDavid du Colombier void	objfile(char*);
336*ce95e1b3SDavid du Colombier int	ocmp(void*, void*);
337*ce95e1b3SDavid du Colombier long	opirr(int);
338*ce95e1b3SDavid du Colombier Optab*	oplook(Prog*);
339*ce95e1b3SDavid du Colombier long	oprrr(int);
340*ce95e1b3SDavid du Colombier void	patch(void);
341*ce95e1b3SDavid du Colombier void	prasm(Prog*);
342*ce95e1b3SDavid du Colombier void	prepend(Prog*, Prog*);
343*ce95e1b3SDavid du Colombier Prog*	prg(void);
344*ce95e1b3SDavid du Colombier int	pseudo(Prog*);
345*ce95e1b3SDavid du Colombier void	putsymb(char*, int, vlong, int);
346*ce95e1b3SDavid du Colombier long	regoff(Adr*);
347*ce95e1b3SDavid du Colombier int		classreg(Adr*);
348*ce95e1b3SDavid du Colombier int	relinv(int);
349*ce95e1b3SDavid du Colombier int relrev(int);
350*ce95e1b3SDavid du Colombier vlong	rnd(vlong, vlong);
351*ce95e1b3SDavid du Colombier void	span(void);
352*ce95e1b3SDavid du Colombier void	strnput(char*, int);
353*ce95e1b3SDavid du Colombier void	undef(void);
354*ce95e1b3SDavid du Colombier int	vconshift(vlong);
355*ce95e1b3SDavid du Colombier void	wput(long);
356*ce95e1b3SDavid du Colombier void	wputl(long);
357*ce95e1b3SDavid du Colombier void	xdefine(char*, int, long);
358*ce95e1b3SDavid du Colombier void	xfol(Prog*);
359*ce95e1b3SDavid du Colombier void	xfol(Prog*);
360*ce95e1b3SDavid du Colombier void	nopstat(char*, Count*);
361