xref: /plan9-contrib/sys/src/cmd/cc/cc.h (revision 2ec6491f4460014c01f3ea5c06b30b1a392b0bb2)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
3219b2ee8SDavid du Colombier #include <bio.h>
43e12c5d1SDavid du Colombier #include <ctype.h>
53e12c5d1SDavid du Colombier 
63e12c5d1SDavid du Colombier #pragma	lib	"../cc/cc.a$O"
73e12c5d1SDavid du Colombier 
87dd7cddfSDavid du Colombier #ifndef	EXTERN
97dd7cddfSDavid du Colombier #define EXTERN	extern
107dd7cddfSDavid du Colombier #endif
117dd7cddfSDavid du Colombier 
123e12c5d1SDavid du Colombier typedef	struct	Node	Node;
133e12c5d1SDavid du Colombier typedef	struct	Sym	Sym;
143e12c5d1SDavid du Colombier typedef	struct	Type	Type;
1580ee5cbfSDavid du Colombier typedef	struct	Funct	Funct;
163e12c5d1SDavid du Colombier typedef	struct	Decl	Decl;
173e12c5d1SDavid du Colombier typedef	struct	Io	Io;
183e12c5d1SDavid du Colombier typedef	struct	Hist	Hist;
19219b2ee8SDavid du Colombier typedef	struct	Term	Term;
207dd7cddfSDavid du Colombier typedef	struct	Init	Init;
217dd7cddfSDavid du Colombier typedef	struct	Bits	Bits;
223e12c5d1SDavid du Colombier 
2382726826SDavid du Colombier typedef	Rune	TRune;	/* target system type */
2482726826SDavid du Colombier 
253e12c5d1SDavid du Colombier #define	NHUNK		50000L
26*2ec6491fSDavid du Colombier #define	BUFSIZ		16*1024
27d40255d8SDavid du Colombier #define	NSYMB		1500
283e12c5d1SDavid du Colombier #define	NHASH		1024
293e12c5d1SDavid du Colombier #define	STRINGSZ	200
303e12c5d1SDavid du Colombier #define	HISTSZ		20
31d40255d8SDavid du Colombier #define YYMAXDEPTH	1500
32219b2ee8SDavid du Colombier #define	NTERM		10
337dd7cddfSDavid du Colombier #define	MAXALIGN	7
34219b2ee8SDavid du Colombier 
3540d01547SDavid du Colombier #define	SIGN(n)		((uvlong)1<<(n-1))
36219b2ee8SDavid du Colombier #define	MASK(n)		(SIGN(n)|(SIGN(n)-1))
373e12c5d1SDavid du Colombier 
387dd7cddfSDavid du Colombier #define	BITS	5
397dd7cddfSDavid du Colombier #define	NVAR	(BITS*sizeof(ulong)*8)
407dd7cddfSDavid du Colombier struct	Bits
417dd7cddfSDavid du Colombier {
427dd7cddfSDavid du Colombier 	ulong	b[BITS];
437dd7cddfSDavid du Colombier };
443e12c5d1SDavid du Colombier 
453e12c5d1SDavid du Colombier struct	Node
463e12c5d1SDavid du Colombier {
473e12c5d1SDavid du Colombier 	Node*	left;
483e12c5d1SDavid du Colombier 	Node*	right;
49219b2ee8SDavid du Colombier 	void*	label;
50219b2ee8SDavid du Colombier 	long	pc;
51219b2ee8SDavid du Colombier 	int	reg;
52219b2ee8SDavid du Colombier 	long	xoffset;
53219b2ee8SDavid du Colombier 	double	fconst;		/* fp constant */
54219b2ee8SDavid du Colombier 	vlong	vconst;		/* non fp const */
55219b2ee8SDavid du Colombier 	char*	cstring;	/* character string */
5682726826SDavid du Colombier 	TRune*	rstring;	/* rune string */
577dd7cddfSDavid du Colombier 
583e12c5d1SDavid du Colombier 	Sym*	sym;
593e12c5d1SDavid du Colombier 	Type*	type;
603e12c5d1SDavid du Colombier 	long	lineno;
613e12c5d1SDavid du Colombier 	char	op;
6222a127bbSDavid du Colombier 	char	oldop;
6322a127bbSDavid du Colombier 	char xcast;
643e12c5d1SDavid du Colombier 	char	class;
653e12c5d1SDavid du Colombier 	char	etype;
663e12c5d1SDavid du Colombier 	char	complex;
673e12c5d1SDavid du Colombier 	char	addable;
683e12c5d1SDavid du Colombier 	char	scale;
697dd7cddfSDavid du Colombier 	char	garb;
703e12c5d1SDavid du Colombier };
713e12c5d1SDavid du Colombier #define	Z	((Node*)0)
723e12c5d1SDavid du Colombier 
733e12c5d1SDavid du Colombier struct	Sym
743e12c5d1SDavid du Colombier {
753e12c5d1SDavid du Colombier 	Sym*	link;
763e12c5d1SDavid du Colombier 	Type*	type;
773e12c5d1SDavid du Colombier 	Type*	suetag;
78219b2ee8SDavid du Colombier 	Type*	tenum;
793e12c5d1SDavid du Colombier 	char*	macro;
803e12c5d1SDavid du Colombier 	long	varlineno;
813e12c5d1SDavid du Colombier 	long	offset;
82219b2ee8SDavid du Colombier 	vlong	vconst;
83219b2ee8SDavid du Colombier 	double	fconst;
843e12c5d1SDavid du Colombier 	Node*	label;
853e12c5d1SDavid du Colombier 	ushort	lexical;
86219b2ee8SDavid du Colombier 	char	*name;
879a747e4fSDavid du Colombier 	ushort	block;
889a747e4fSDavid du Colombier 	ushort	sueblock;
893e12c5d1SDavid du Colombier 	char	class;
903e12c5d1SDavid du Colombier 	char	sym;
913e12c5d1SDavid du Colombier 	char	aused;
92375daca8SDavid du Colombier 	char	sig;
933e12c5d1SDavid du Colombier };
943e12c5d1SDavid du Colombier #define	S	((Sym*)0)
953e12c5d1SDavid du Colombier 
96375daca8SDavid du Colombier enum{
97375daca8SDavid du Colombier 	SIGNONE = 0,
98375daca8SDavid du Colombier 	SIGDONE = 1,
99375daca8SDavid du Colombier 	SIGINTERN = 2,
100375daca8SDavid du Colombier 
101375daca8SDavid du Colombier 	SIGNINTERN = 1729*325*1729,
102375daca8SDavid du Colombier };
103375daca8SDavid du Colombier 
1043e12c5d1SDavid du Colombier struct	Decl
1053e12c5d1SDavid du Colombier {
1063e12c5d1SDavid du Colombier 	Decl*	link;
1073e12c5d1SDavid du Colombier 	Sym*	sym;
1083e12c5d1SDavid du Colombier 	Type*	type;
1093e12c5d1SDavid du Colombier 	long	varlineno;
1103e12c5d1SDavid du Colombier 	long	offset;
1113e12c5d1SDavid du Colombier 	short	val;
1129a747e4fSDavid du Colombier 	ushort	block;
1133e12c5d1SDavid du Colombier 	char	class;
1143e12c5d1SDavid du Colombier 	char	aused;
1153e12c5d1SDavid du Colombier };
1163e12c5d1SDavid du Colombier #define	D	((Decl*)0)
1173e12c5d1SDavid du Colombier 
1183e12c5d1SDavid du Colombier struct	Type
1193e12c5d1SDavid du Colombier {
1203e12c5d1SDavid du Colombier 	Sym*	sym;
1213e12c5d1SDavid du Colombier 	Sym*	tag;
12280ee5cbfSDavid du Colombier 	Funct*	funct;
1233e12c5d1SDavid du Colombier 	Type*	link;
1243e12c5d1SDavid du Colombier 	Type*	down;
1253e12c5d1SDavid du Colombier 	long	width;
1263e12c5d1SDavid du Colombier 	long	offset;
1273e12c5d1SDavid du Colombier 	long	lineno;
1286891d857SDavid du Colombier 	schar	shift;
1293e12c5d1SDavid du Colombier 	char	nbits;
1303e12c5d1SDavid du Colombier 	char	etype;
1317dd7cddfSDavid du Colombier 	char	garb;
1323e12c5d1SDavid du Colombier };
13380ee5cbfSDavid du Colombier 
1343e12c5d1SDavid du Colombier #define	T	((Type*)0)
1353e12c5d1SDavid du Colombier #define	NODECL	((void(*)(int, Type*, Sym*))0)
1363e12c5d1SDavid du Colombier 
1377dd7cddfSDavid du Colombier struct	Init			/* general purpose initialization */
1387dd7cddfSDavid du Colombier {
1397dd7cddfSDavid du Colombier 	int	code;
1407dd7cddfSDavid du Colombier 	ulong	value;
1417dd7cddfSDavid du Colombier 	char*	s;
1427dd7cddfSDavid du Colombier };
1437dd7cddfSDavid du Colombier 
1447dd7cddfSDavid du Colombier EXTERN struct
1453e12c5d1SDavid du Colombier {
1463e12c5d1SDavid du Colombier 	char*	p;
1473e12c5d1SDavid du Colombier 	int	c;
1483e12c5d1SDavid du Colombier } fi;
1493e12c5d1SDavid du Colombier 
1503e12c5d1SDavid du Colombier struct	Io
1513e12c5d1SDavid du Colombier {
1523e12c5d1SDavid du Colombier 	Io*	link;
1533e12c5d1SDavid du Colombier 	char*	p;
1543e12c5d1SDavid du Colombier 	char	b[BUFSIZ];
1553e12c5d1SDavid du Colombier 	short	c;
1563e12c5d1SDavid du Colombier 	short	f;
1573e12c5d1SDavid du Colombier };
1583e12c5d1SDavid du Colombier #define	I	((Io*)0)
1593e12c5d1SDavid du Colombier 
1603e12c5d1SDavid du Colombier struct	Hist
1613e12c5d1SDavid du Colombier {
1623e12c5d1SDavid du Colombier 	Hist*	link;
1633e12c5d1SDavid du Colombier 	char*	name;
1643e12c5d1SDavid du Colombier 	long	line;
1653e12c5d1SDavid du Colombier 	long	offset;
1663e12c5d1SDavid du Colombier };
1673e12c5d1SDavid du Colombier #define	H	((Hist*)0)
1687dd7cddfSDavid du Colombier EXTERN Hist*	hist;
1693e12c5d1SDavid du Colombier 
170219b2ee8SDavid du Colombier struct	Term
171219b2ee8SDavid du Colombier {
172219b2ee8SDavid du Colombier 	vlong	mult;
173219b2ee8SDavid du Colombier 	Node	*node;
174219b2ee8SDavid du Colombier };
175219b2ee8SDavid du Colombier 
1763e12c5d1SDavid du Colombier enum
1773e12c5d1SDavid du Colombier {
1787dd7cddfSDavid du Colombier 	Axxx,
1797dd7cddfSDavid du Colombier 	Ael1,
1807dd7cddfSDavid du Colombier 	Ael2,
1817dd7cddfSDavid du Colombier 	Asu2,
1827dd7cddfSDavid du Colombier 	Aarg0,
1837dd7cddfSDavid du Colombier 	Aarg1,
1847dd7cddfSDavid du Colombier 	Aarg2,
1857dd7cddfSDavid du Colombier 	Aaut3,
1867dd7cddfSDavid du Colombier 	NALIGN,
1877dd7cddfSDavid du Colombier };
1887dd7cddfSDavid du Colombier 
1897dd7cddfSDavid du Colombier enum				/* also in ../{8a,0a}.h */
1907dd7cddfSDavid du Colombier {
1917dd7cddfSDavid du Colombier 	Plan9	= 1<<0,
1927dd7cddfSDavid du Colombier 	Unix	= 1<<1,
1937dd7cddfSDavid du Colombier 	Windows	= 1<<2,
1947dd7cddfSDavid du Colombier };
1957dd7cddfSDavid du Colombier 
1967dd7cddfSDavid du Colombier enum
1977dd7cddfSDavid du Colombier {
1983e12c5d1SDavid du Colombier 	DMARK,
1993e12c5d1SDavid du Colombier 	DAUTO,
2003e12c5d1SDavid du Colombier 	DSUE,
2013e12c5d1SDavid du Colombier 	DLABEL,
2023e12c5d1SDavid du Colombier };
2033e12c5d1SDavid du Colombier enum
2043e12c5d1SDavid du Colombier {
2053e12c5d1SDavid du Colombier 	OXXX,
2067dd7cddfSDavid du Colombier 	OADD,
2077dd7cddfSDavid du Colombier 	OADDR,
2087dd7cddfSDavid du Colombier 	OAND,
2097dd7cddfSDavid du Colombier 	OANDAND,
2107dd7cddfSDavid du Colombier 	OARRAY,
2117dd7cddfSDavid du Colombier 	OAS,
2127dd7cddfSDavid du Colombier 	OASI,
2137dd7cddfSDavid du Colombier 	OASADD,
2147dd7cddfSDavid du Colombier 	OASAND,
2157dd7cddfSDavid du Colombier 	OASASHL,
2167dd7cddfSDavid du Colombier 	OASASHR,
2177dd7cddfSDavid du Colombier 	OASDIV,
2187dd7cddfSDavid du Colombier 	OASHL,
2197dd7cddfSDavid du Colombier 	OASHR,
2207dd7cddfSDavid du Colombier 	OASLDIV,
2217dd7cddfSDavid du Colombier 	OASLMOD,
2227dd7cddfSDavid du Colombier 	OASLMUL,
2237dd7cddfSDavid du Colombier 	OASLSHR,
2247dd7cddfSDavid du Colombier 	OASMOD,
2257dd7cddfSDavid du Colombier 	OASMUL,
2267dd7cddfSDavid du Colombier 	OASOR,
2277dd7cddfSDavid du Colombier 	OASSUB,
2287dd7cddfSDavid du Colombier 	OASXOR,
2297dd7cddfSDavid du Colombier 	OBIT,
2307dd7cddfSDavid du Colombier 	OBREAK,
2317dd7cddfSDavid du Colombier 	OCASE,
2327dd7cddfSDavid du Colombier 	OCAST,
2337dd7cddfSDavid du Colombier 	OCOMMA,
2347dd7cddfSDavid du Colombier 	OCOND,
2357dd7cddfSDavid du Colombier 	OCONST,
2367dd7cddfSDavid du Colombier 	OCONTINUE,
2377dd7cddfSDavid du Colombier 	ODIV,
2387dd7cddfSDavid du Colombier 	ODOT,
2397dd7cddfSDavid du Colombier 	ODOTDOT,
2407dd7cddfSDavid du Colombier 	ODWHILE,
2417dd7cddfSDavid du Colombier 	OENUM,
2427dd7cddfSDavid du Colombier 	OEQ,
2437dd7cddfSDavid du Colombier 	OFOR,
2447dd7cddfSDavid du Colombier 	OFUNC,
2457dd7cddfSDavid du Colombier 	OGE,
2467dd7cddfSDavid du Colombier 	OGOTO,
2477dd7cddfSDavid du Colombier 	OGT,
2487dd7cddfSDavid du Colombier 	OHI,
2497dd7cddfSDavid du Colombier 	OHS,
2507dd7cddfSDavid du Colombier 	OIF,
2517dd7cddfSDavid du Colombier 	OIND,
2527dd7cddfSDavid du Colombier 	OINDREG,
2537dd7cddfSDavid du Colombier 	OINIT,
2547dd7cddfSDavid du Colombier 	OLABEL,
2557dd7cddfSDavid du Colombier 	OLDIV,
2567dd7cddfSDavid du Colombier 	OLE,
2577dd7cddfSDavid du Colombier 	OLIST,
2587dd7cddfSDavid du Colombier 	OLMOD,
2597dd7cddfSDavid du Colombier 	OLMUL,
2607dd7cddfSDavid du Colombier 	OLO,
2617dd7cddfSDavid du Colombier 	OLS,
2627dd7cddfSDavid du Colombier 	OLSHR,
2637dd7cddfSDavid du Colombier 	OLT,
2647dd7cddfSDavid du Colombier 	OMOD,
2657dd7cddfSDavid du Colombier 	OMUL,
2667dd7cddfSDavid du Colombier 	ONAME,
2677dd7cddfSDavid du Colombier 	ONE,
2687dd7cddfSDavid du Colombier 	ONOT,
2697dd7cddfSDavid du Colombier 	OOR,
2707dd7cddfSDavid du Colombier 	OOROR,
2717dd7cddfSDavid du Colombier 	OPOSTDEC,
2727dd7cddfSDavid du Colombier 	OPOSTINC,
2737dd7cddfSDavid du Colombier 	OPREDEC,
2747dd7cddfSDavid du Colombier 	OPREINC,
2757dd7cddfSDavid du Colombier 	OPROTO,
2767dd7cddfSDavid du Colombier 	OREGISTER,
2777dd7cddfSDavid du Colombier 	ORETURN,
2787dd7cddfSDavid du Colombier 	OSET,
2797dd7cddfSDavid du Colombier 	OSIGN,
2807dd7cddfSDavid du Colombier 	OSIZE,
2817dd7cddfSDavid du Colombier 	OSTRING,
2827dd7cddfSDavid du Colombier 	OLSTRING,
2837dd7cddfSDavid du Colombier 	OSTRUCT,
2847dd7cddfSDavid du Colombier 	OSUB,
2857dd7cddfSDavid du Colombier 	OSWITCH,
2867dd7cddfSDavid du Colombier 	OUNION,
2877dd7cddfSDavid du Colombier 	OUSED,
2887dd7cddfSDavid du Colombier 	OWHILE,
2897dd7cddfSDavid du Colombier 	OXOR,
2907dd7cddfSDavid du Colombier 	ONEG,
2917dd7cddfSDavid du Colombier 	OCOM,
29280ee5cbfSDavid du Colombier 	OPOS,
2937dd7cddfSDavid du Colombier 	OELEM,
2947dd7cddfSDavid du Colombier 
2957dd7cddfSDavid du Colombier 	OTST,		/* used in some compilers */
2967dd7cddfSDavid du Colombier 	OINDEX,
2977dd7cddfSDavid du Colombier 	OFAS,
298da51d93aSDavid du Colombier 	OREGPAIR,
299d40255d8SDavid du Colombier 	OEXREG,
3007dd7cddfSDavid du Colombier 
3017dd7cddfSDavid du Colombier 	OEND
3023e12c5d1SDavid du Colombier };
3033e12c5d1SDavid du Colombier enum
3043e12c5d1SDavid du Colombier {
3053e12c5d1SDavid du Colombier 	TXXX,
3067dd7cddfSDavid du Colombier 	TCHAR,
3077dd7cddfSDavid du Colombier 	TUCHAR,
3087dd7cddfSDavid du Colombier 	TSHORT,
3097dd7cddfSDavid du Colombier 	TUSHORT,
3107dd7cddfSDavid du Colombier 	TINT,
3117dd7cddfSDavid du Colombier 	TUINT,
3127dd7cddfSDavid du Colombier 	TLONG,
3137dd7cddfSDavid du Colombier 	TULONG,
3147dd7cddfSDavid du Colombier 	TVLONG,
3157dd7cddfSDavid du Colombier 	TUVLONG,
3167dd7cddfSDavid du Colombier 	TFLOAT,
3177dd7cddfSDavid du Colombier 	TDOUBLE,
3187dd7cddfSDavid du Colombier 	TIND,
3197dd7cddfSDavid du Colombier 	TFUNC,
3207dd7cddfSDavid du Colombier 	TARRAY,
3217dd7cddfSDavid du Colombier 	TVOID,
3227dd7cddfSDavid du Colombier 	TSTRUCT,
3237dd7cddfSDavid du Colombier 	TUNION,
3247dd7cddfSDavid du Colombier 	TENUM,
3256891d857SDavid du Colombier 	TDOT,
3267dd7cddfSDavid du Colombier 	NTYPE,
3277dd7cddfSDavid du Colombier 
3287dd7cddfSDavid du Colombier 	TAUTO	= NTYPE,
3297dd7cddfSDavid du Colombier 	TEXTERN,
3307dd7cddfSDavid du Colombier 	TSTATIC,
3317dd7cddfSDavid du Colombier 	TTYPEDEF,
33280ee5cbfSDavid du Colombier 	TTYPESTR,
3337dd7cddfSDavid du Colombier 	TREGISTER,
3347dd7cddfSDavid du Colombier 	TCONSTNT,
3357dd7cddfSDavid du Colombier 	TVOLATILE,
3367dd7cddfSDavid du Colombier 	TUNSIGNED,
3377dd7cddfSDavid du Colombier 	TSIGNED,
3387dd7cddfSDavid du Colombier 	TFILE,
3397dd7cddfSDavid du Colombier 	TOLD,
3407dd7cddfSDavid du Colombier 	NALLTYPES,
34182726826SDavid du Colombier 
34282726826SDavid du Colombier 	/* adapt size of Rune to target system's size */
34382726826SDavid du Colombier 	TRUNE = sizeof(TRune)==4? TUINT: TUSHORT,
3443e12c5d1SDavid du Colombier };
3453e12c5d1SDavid du Colombier enum
3463e12c5d1SDavid du Colombier {
3473e12c5d1SDavid du Colombier 	CXXX,
3487dd7cddfSDavid du Colombier 	CAUTO,
3497dd7cddfSDavid du Colombier 	CEXTERN,
3507dd7cddfSDavid du Colombier 	CGLOBL,
3517dd7cddfSDavid du Colombier 	CSTATIC,
3527dd7cddfSDavid du Colombier 	CLOCAL,
3537dd7cddfSDavid du Colombier 	CTYPEDEF,
35480ee5cbfSDavid du Colombier 	CTYPESTR,
3557dd7cddfSDavid du Colombier 	CPARAM,
3567dd7cddfSDavid du Colombier 	CSELEM,
3577dd7cddfSDavid du Colombier 	CLABEL,
3587dd7cddfSDavid du Colombier 	CEXREG,
3597dd7cddfSDavid du Colombier 	NCTYPES,
3603e12c5d1SDavid du Colombier };
3613e12c5d1SDavid du Colombier enum
3623e12c5d1SDavid du Colombier {
3637dd7cddfSDavid du Colombier 	GXXX		= 0,
3647dd7cddfSDavid du Colombier 	GCONSTNT	= 1<<0,
3657dd7cddfSDavid du Colombier 	GVOLATILE	= 1<<1,
3667dd7cddfSDavid du Colombier 	NGTYPES		= 1<<2,
367375daca8SDavid du Colombier 
368375daca8SDavid du Colombier 	GINCOMPLETE	= 1<<2,
3697dd7cddfSDavid du Colombier };
3707dd7cddfSDavid du Colombier enum
3717dd7cddfSDavid du Colombier {
3723e12c5d1SDavid du Colombier 	BCHAR		= 1L<<TCHAR,
3733e12c5d1SDavid du Colombier 	BUCHAR		= 1L<<TUCHAR,
3743e12c5d1SDavid du Colombier 	BSHORT		= 1L<<TSHORT,
3753e12c5d1SDavid du Colombier 	BUSHORT		= 1L<<TUSHORT,
3767dd7cddfSDavid du Colombier 	BINT		= 1L<<TINT,
3777dd7cddfSDavid du Colombier 	BUINT		= 1L<<TUINT,
3783e12c5d1SDavid du Colombier 	BLONG		= 1L<<TLONG,
3793e12c5d1SDavid du Colombier 	BULONG		= 1L<<TULONG,
3803e12c5d1SDavid du Colombier 	BVLONG		= 1L<<TVLONG,
381219b2ee8SDavid du Colombier 	BUVLONG		= 1L<<TUVLONG,
3823e12c5d1SDavid du Colombier 	BFLOAT		= 1L<<TFLOAT,
3833e12c5d1SDavid du Colombier 	BDOUBLE		= 1L<<TDOUBLE,
3843e12c5d1SDavid du Colombier 	BIND		= 1L<<TIND,
3857dd7cddfSDavid du Colombier 	BFUNC		= 1L<<TFUNC,
3867dd7cddfSDavid du Colombier 	BARRAY		= 1L<<TARRAY,
3873e12c5d1SDavid du Colombier 	BVOID		= 1L<<TVOID,
3883e12c5d1SDavid du Colombier 	BSTRUCT		= 1L<<TSTRUCT,
3893e12c5d1SDavid du Colombier 	BUNION		= 1L<<TUNION,
3907dd7cddfSDavid du Colombier 	BENUM		= 1L<<TENUM,
3917dd7cddfSDavid du Colombier 	BFILE		= 1L<<TFILE,
3927dd7cddfSDavid du Colombier 	BDOT		= 1L<<TDOT,
3937dd7cddfSDavid du Colombier 	BCONSTNT	= 1L<<TCONSTNT,
3947dd7cddfSDavid du Colombier 	BVOLATILE	= 1L<<TVOLATILE,
3957dd7cddfSDavid du Colombier 	BUNSIGNED	= 1L<<TUNSIGNED,
3967dd7cddfSDavid du Colombier 	BSIGNED		= 1L<<TSIGNED,
3977dd7cddfSDavid du Colombier 	BAUTO		= 1L<<TAUTO,
3987dd7cddfSDavid du Colombier 	BEXTERN		= 1L<<TEXTERN,
3997dd7cddfSDavid du Colombier 	BSTATIC		= 1L<<TSTATIC,
4007dd7cddfSDavid du Colombier 	BTYPEDEF	= 1L<<TTYPEDEF,
40180ee5cbfSDavid du Colombier 	BTYPESTR	= 1L<<TTYPESTR,
4027dd7cddfSDavid du Colombier 	BREGISTER	= 1L<<TREGISTER,
4033e12c5d1SDavid du Colombier 
4047dd7cddfSDavid du Colombier 	BINTEGER	= BCHAR|BUCHAR|BSHORT|BUSHORT|BINT|BUINT|
4057dd7cddfSDavid du Colombier 				BLONG|BULONG|BVLONG|BUVLONG,
4063e12c5d1SDavid du Colombier 	BNUMBER		= BINTEGER|BFLOAT|BDOUBLE,
4073e12c5d1SDavid du Colombier 
4083e12c5d1SDavid du Colombier /* these can be overloaded with complex types */
4093e12c5d1SDavid du Colombier 
41080ee5cbfSDavid du Colombier 	BCLASS		= BAUTO|BEXTERN|BSTATIC|BTYPEDEF|BTYPESTR|BREGISTER,
4117dd7cddfSDavid du Colombier 	BGARB		= BCONSTNT|BVOLATILE,
4123e12c5d1SDavid du Colombier };
4133e12c5d1SDavid du Colombier 
41480ee5cbfSDavid du Colombier struct	Funct
41580ee5cbfSDavid du Colombier {
41680ee5cbfSDavid du Colombier 	Sym*	sym[OEND];
41780ee5cbfSDavid du Colombier 	Sym*	castto[NTYPE];
41880ee5cbfSDavid du Colombier 	Sym*	castfr[NTYPE];
41980ee5cbfSDavid du Colombier };
42080ee5cbfSDavid du Colombier 
4217dd7cddfSDavid du Colombier EXTERN struct
422219b2ee8SDavid du Colombier {
423219b2ee8SDavid du Colombier 	Type*	tenum;		/* type of entire enum */
424219b2ee8SDavid du Colombier 	Type*	cenum;		/* type of current enum run */
425219b2ee8SDavid du Colombier 	vlong	lastenum;	/* value of current enum */
426219b2ee8SDavid du Colombier 	double	floatenum;	/* value of current enum */
427219b2ee8SDavid du Colombier } en;
4283e12c5d1SDavid du Colombier 
4297dd7cddfSDavid du Colombier EXTERN	int	autobn;
4307dd7cddfSDavid du Colombier EXTERN	long	autoffset;
4317dd7cddfSDavid du Colombier EXTERN	int	blockno;
4327dd7cddfSDavid du Colombier EXTERN	Decl*	dclstack;
4337dd7cddfSDavid du Colombier EXTERN	char	debug[256];
4347dd7cddfSDavid du Colombier EXTERN	Hist*	ehist;
4357dd7cddfSDavid du Colombier EXTERN	long	firstbit;
4367dd7cddfSDavid du Colombier EXTERN	Sym*	firstarg;
4377dd7cddfSDavid du Colombier EXTERN	Type*	firstargtype;
4387dd7cddfSDavid du Colombier EXTERN	Decl*	firstdcl;
4397dd7cddfSDavid du Colombier EXTERN	int	fperror;
4407dd7cddfSDavid du Colombier EXTERN	Sym*	hash[NHASH];
4416891d857SDavid du Colombier EXTERN	int	hasdoubled;
4427dd7cddfSDavid du Colombier EXTERN	char*	hunk;
4436bbfed0dSDavid du Colombier EXTERN	char**	include;
4447dd7cddfSDavid du Colombier EXTERN	Io*	iofree;
4457dd7cddfSDavid du Colombier EXTERN	Io*	ionext;
4467dd7cddfSDavid du Colombier EXTERN	Io*	iostack;
4477dd7cddfSDavid du Colombier EXTERN	long	lastbit;
4487dd7cddfSDavid du Colombier EXTERN	char	lastclass;
4497dd7cddfSDavid du Colombier EXTERN	Type*	lastdcl;
4507dd7cddfSDavid du Colombier EXTERN	long	lastfield;
4517dd7cddfSDavid du Colombier EXTERN	Type*	lasttype;
4527dd7cddfSDavid du Colombier EXTERN	long	lineno;
4536bbfed0dSDavid du Colombier EXTERN	int	maxinclude;
45440d01547SDavid du Colombier EXTERN	long	nearln;
4557dd7cddfSDavid du Colombier EXTERN	int	nerrors;
4567dd7cddfSDavid du Colombier EXTERN	int	newflag;
4577dd7cddfSDavid du Colombier EXTERN	long	nhunk;
4587dd7cddfSDavid du Colombier EXTERN	int	ninclude;
4597dd7cddfSDavid du Colombier EXTERN	Node*	nodproto;
4607dd7cddfSDavid du Colombier EXTERN	Node*	nodcast;
4617dd7cddfSDavid du Colombier EXTERN	Biobuf	outbuf;
46218027f8cSDavid du Colombier EXTERN	Biobuf	diagbuf;
4637dd7cddfSDavid du Colombier EXTERN	char*	outfile;
4647dd7cddfSDavid du Colombier EXTERN	char*	pathname;
4657dd7cddfSDavid du Colombier EXTERN	int	peekc;
4667dd7cddfSDavid du Colombier EXTERN	long	stkoff;
4677dd7cddfSDavid du Colombier EXTERN	Type*	strf;
4687dd7cddfSDavid du Colombier EXTERN	Type*	strl;
4697dd7cddfSDavid du Colombier EXTERN	char	symb[NSYMB];
4707dd7cddfSDavid du Colombier EXTERN	Sym*	symstring;
4717dd7cddfSDavid du Colombier EXTERN	int	taggen;
4727dd7cddfSDavid du Colombier EXTERN	Type*	tfield;
4737dd7cddfSDavid du Colombier EXTERN	Type*	tufield;
4747dd7cddfSDavid du Colombier EXTERN	int	thechar;
4757dd7cddfSDavid du Colombier EXTERN	char*	thestring;
4767dd7cddfSDavid du Colombier EXTERN	Type*	thisfn;
4777dd7cddfSDavid du Colombier EXTERN	long	thunk;
4787dd7cddfSDavid du Colombier EXTERN	Type*	types[NTYPE];
4797dd7cddfSDavid du Colombier EXTERN	Type*	fntypes[NTYPE];
4807dd7cddfSDavid du Colombier EXTERN	Node*	initlist;
4817dd7cddfSDavid du Colombier EXTERN	Term	term[NTERM];
4827dd7cddfSDavid du Colombier EXTERN	int	nterm;
4839847521cSDavid du Colombier EXTERN	int	packflg;
4847dd7cddfSDavid du Colombier EXTERN	int	fproundflg;
485e288d156SDavid du Colombier EXTERN	int	profileflg;
486b85a8364SDavid du Colombier EXTERN	int	ncontin;
487d40255d8SDavid du Colombier EXTERN	int	newvlongcode;
488b85a8364SDavid du Colombier EXTERN	int	canreach;
489b85a8364SDavid du Colombier EXTERN	int	warnreach;
4907dd7cddfSDavid du Colombier EXTERN	Bits	zbits;
4917dd7cddfSDavid du Colombier 
4927dd7cddfSDavid du Colombier extern	char	*onames[], *tnames[], *gnames[];
4937dd7cddfSDavid du Colombier extern	char	*cnames[], *qnames[], *bnames[];
4943e12c5d1SDavid du Colombier extern	char	tab[NTYPE][NTYPE];
495219b2ee8SDavid du Colombier extern	char	comrel[], invrel[], logrel[];
4967dd7cddfSDavid du Colombier extern	long	ncast[], tadd[], tand[];
4973e12c5d1SDavid du Colombier extern	long	targ[], tasadd[], tasign[], tcast[];
4983e12c5d1SDavid du Colombier extern	long	tdot[], tfunct[], tindir[], tmul[];
4993e12c5d1SDavid du Colombier extern	long	tnot[], trel[], tsub[];
5003e12c5d1SDavid du Colombier 
501219b2ee8SDavid du Colombier extern	char	typeaf[];
502219b2ee8SDavid du Colombier extern	char	typefd[];
503219b2ee8SDavid du Colombier extern	char	typei[];
504219b2ee8SDavid du Colombier extern	char	typesu[];
505219b2ee8SDavid du Colombier extern	char	typesuv[];
506219b2ee8SDavid du Colombier extern	char	typeu[];
507219b2ee8SDavid du Colombier extern	char	typev[];
508219b2ee8SDavid du Colombier extern	char	typec[];
509219b2ee8SDavid du Colombier extern	char	typeh[];
5107dd7cddfSDavid du Colombier extern	char	typeil[];
5117dd7cddfSDavid du Colombier extern	char	typeilp[];
512219b2ee8SDavid du Colombier extern	char	typechl[];
513da51d93aSDavid du Colombier extern	char	typechlv[];
51422a127bbSDavid du Colombier extern	char	typechlvp[];
515219b2ee8SDavid du Colombier extern	char	typechlp[];
516219b2ee8SDavid du Colombier extern	char	typechlpfd[];
517219b2ee8SDavid du Colombier 
5183a276d32SDavid du Colombier EXTERN	char*	typeswitch;
5194ac975e2SDavid du Colombier EXTERN	char*	typeword;
5204ac975e2SDavid du Colombier EXTERN	char*	typecmplx;
5214ac975e2SDavid du Colombier 
5227dd7cddfSDavid du Colombier extern	ulong	thash1;
5237dd7cddfSDavid du Colombier extern	ulong	thash2;
5247dd7cddfSDavid du Colombier extern	ulong	thash3;
5257dd7cddfSDavid du Colombier extern	ulong	thash[];
5267dd7cddfSDavid du Colombier 
5273e12c5d1SDavid du Colombier /*
5287dd7cddfSDavid du Colombier  *	compat.c/unix.c/windows.c
5293e12c5d1SDavid du Colombier  */
5307dd7cddfSDavid du Colombier int	mywait(int*);
5313e12c5d1SDavid du Colombier int	mycreat(char*, int);
5327dd7cddfSDavid du Colombier int	systemtype(int);
5337dd7cddfSDavid du Colombier int	pathchar(void);
53480ee5cbfSDavid du Colombier int	myaccess(char*);
5357dd7cddfSDavid du Colombier char*	mygetwd(char*, int);
5367dd7cddfSDavid du Colombier int	myexec(char*, char*[]);
5377dd7cddfSDavid du Colombier int	mydup(int, int);
5387dd7cddfSDavid du Colombier int	myfork(void);
5397dd7cddfSDavid du Colombier int	mypipe(int*);
5407dd7cddfSDavid du Colombier void*	mysbrk(ulong);
5413e12c5d1SDavid du Colombier 
5423e12c5d1SDavid du Colombier /*
5433e12c5d1SDavid du Colombier  *	parser
5443e12c5d1SDavid du Colombier  */
5453e12c5d1SDavid du Colombier int	yyparse(void);
546219b2ee8SDavid du Colombier int	mpatov(char*, vlong*);
5473e12c5d1SDavid du Colombier 
5483e12c5d1SDavid du Colombier /*
5493e12c5d1SDavid du Colombier  *	lex.c
5503e12c5d1SDavid du Colombier  */
5517dd7cddfSDavid du Colombier void*	allocn(void*, long, long);
5527dd7cddfSDavid du Colombier void*	alloc(long);
5533e12c5d1SDavid du Colombier void	cinit(void);
5547dd7cddfSDavid du Colombier int	compile(char*, char**, int);
5553e12c5d1SDavid du Colombier void	errorexit(void);
5563e12c5d1SDavid du Colombier int	filbuf(void);
5573e12c5d1SDavid du Colombier int	getc(void);
5583e12c5d1SDavid du Colombier long	getr(void);
5593e12c5d1SDavid du Colombier int	getnsc(void);
5603e12c5d1SDavid du Colombier Sym*	lookup(void);
5613e12c5d1SDavid du Colombier void	main(int, char*[]);
5623e12c5d1SDavid du Colombier void	newfile(char*, int);
5633e12c5d1SDavid du Colombier void	newio(void);
5643e12c5d1SDavid du Colombier void	pushio(void);
5653e12c5d1SDavid du Colombier long	escchar(long, int, int);
5663e12c5d1SDavid du Colombier Sym*	slookup(char*);
5673e12c5d1SDavid du Colombier void	syminit(Sym*);
5683e12c5d1SDavid du Colombier void	unget(int);
5693e12c5d1SDavid du Colombier long	yylex(void);
5709a747e4fSDavid du Colombier int	Lconv(Fmt*);
5719a747e4fSDavid du Colombier int	Tconv(Fmt*);
5729a747e4fSDavid du Colombier int	FNconv(Fmt*);
5739a747e4fSDavid du Colombier int	Oconv(Fmt*);
5749a747e4fSDavid du Colombier int	Qconv(Fmt*);
5759a747e4fSDavid du Colombier int	VBconv(Fmt*);
5767dd7cddfSDavid du Colombier void	setinclude(char*);
5773e12c5d1SDavid du Colombier 
5783e12c5d1SDavid du Colombier /*
5793e12c5d1SDavid du Colombier  * mac.c
5803e12c5d1SDavid du Colombier  */
5813e12c5d1SDavid du Colombier void	dodefine(char*);
5823e12c5d1SDavid du Colombier void	domacro(void);
5833e12c5d1SDavid du Colombier Sym*	getsym(void);
5847dd7cddfSDavid du Colombier long	getnsn(void);
5853e12c5d1SDavid du Colombier void	linehist(char*, int);
5863e12c5d1SDavid du Colombier void	macdef(void);
5873e12c5d1SDavid du Colombier void	macprag(void);
5883e12c5d1SDavid du Colombier void	macend(void);
5893e12c5d1SDavid du Colombier void	macexpand(Sym*, char*);
5903e12c5d1SDavid du Colombier void	macif(int);
5913e12c5d1SDavid du Colombier void	macinc(void);
5923e12c5d1SDavid du Colombier void	maclin(void);
5933e12c5d1SDavid du Colombier void	macund(void);
5943e12c5d1SDavid du Colombier 
5953e12c5d1SDavid du Colombier /*
5963e12c5d1SDavid du Colombier  * dcl.c
5973e12c5d1SDavid du Colombier  */
5983e12c5d1SDavid du Colombier Node*	doinit(Sym*, Type*, long, Node*);
5993e12c5d1SDavid du Colombier Type*	tcopy(Type*);
6003e12c5d1SDavid du Colombier Node*	init1(Sym*, Type*, long, int);
6013e12c5d1SDavid du Colombier Node*	newlist(Node*, Node*);
6023e12c5d1SDavid du Colombier void	adecl(int, Type*, Sym*);
6033e12c5d1SDavid du Colombier int	anyproto(Node*);
6043e12c5d1SDavid du Colombier void	argmark(Node*, int);
6053e12c5d1SDavid du Colombier void	dbgdecl(Sym*);
6063e12c5d1SDavid du Colombier Node*	dcllabel(Sym*, int);
6073e12c5d1SDavid du Colombier Node*	dodecl(void(*)(int, Type*, Sym*), int, Type*, Node*);
6083e12c5d1SDavid du Colombier Sym*	mkstatic(Sym*);
6093e12c5d1SDavid du Colombier void	doenum(Sym*, Node*);
6107dd7cddfSDavid du Colombier void	snap(Type*);
611219b2ee8SDavid du Colombier Type*	dotag(Sym*, int, int);
6123e12c5d1SDavid du Colombier void	edecl(int, Type*, Sym*);
6133e12c5d1SDavid du Colombier Type*	fnproto(Node*);
6143e12c5d1SDavid du Colombier Type*	fnproto1(Node*);
6153e12c5d1SDavid du Colombier void	markdcl(void);
6163e12c5d1SDavid du Colombier Type*	paramconv(Type*, int);
6173e12c5d1SDavid du Colombier void	pdecl(int, Type*, Sym*);
6183e12c5d1SDavid du Colombier Decl*	push(void);
6193e12c5d1SDavid du Colombier Decl*	push1(Sym*);
6207dd7cddfSDavid du Colombier Node*	revertdcl(void);
6217dd7cddfSDavid du Colombier long	round(long, int);
6227dd7cddfSDavid du Colombier int	rsametype(Type*, Type*, int, int);
6233e12c5d1SDavid du Colombier int	sametype(Type*, Type*);
624375daca8SDavid du Colombier ulong	sign(Sym*);
625375daca8SDavid du Colombier ulong	signature(Type*);
626d40255d8SDavid du Colombier void	sualign(Type*);
6273e12c5d1SDavid du Colombier void	tmerge(Type*, Sym*);
6283e12c5d1SDavid du Colombier void	walkparam(Node*, int);
6293e12c5d1SDavid du Colombier void	xdecl(int, Type*, Sym*);
6303e12c5d1SDavid du Colombier Node*	contig(Sym*, Node*, long);
6313e12c5d1SDavid du Colombier 
6323e12c5d1SDavid du Colombier /*
6333e12c5d1SDavid du Colombier  * com.c
6343e12c5d1SDavid du Colombier  */
6353e12c5d1SDavid du Colombier void	ccom(Node*);
6363e12c5d1SDavid du Colombier void	complex(Node*);
6373e12c5d1SDavid du Colombier int	tcom(Node*);
6383e12c5d1SDavid du Colombier int	tcoma(Node*, Node*, Type*, int);
6393e12c5d1SDavid du Colombier int	tcomd(Node*);
6403e12c5d1SDavid du Colombier int	tcomo(Node*, int);
6413e12c5d1SDavid du Colombier int	tcomx(Node*);
6423e12c5d1SDavid du Colombier int	tlvalue(Node*);
6437dd7cddfSDavid du Colombier void	constas(Node*, Type*, Type*);
644d40255d8SDavid du Colombier Node*	uncomma(Node*);
645d40255d8SDavid du Colombier Node*	uncomargs(Node*);
6463e12c5d1SDavid du Colombier 
6473e12c5d1SDavid du Colombier /*
6483e12c5d1SDavid du Colombier  * con.c
6493e12c5d1SDavid du Colombier  */
6503e12c5d1SDavid du Colombier void	acom(Node*);
651219b2ee8SDavid du Colombier void	acom1(vlong, Node*);
6523e12c5d1SDavid du Colombier void	acom2(Node*, Type*);
6537dd7cddfSDavid du Colombier int	acomcmp1(const void*, const void*);
6547dd7cddfSDavid du Colombier int	acomcmp2(const void*, const void*);
6553e12c5d1SDavid du Colombier int	addo(Node*);
6563e12c5d1SDavid du Colombier void	evconst(Node*);
6573e12c5d1SDavid du Colombier 
6583e12c5d1SDavid du Colombier /*
65980ee5cbfSDavid du Colombier  * funct.c
66080ee5cbfSDavid du Colombier  */
66180ee5cbfSDavid du Colombier int	isfunct(Node*);
66280ee5cbfSDavid du Colombier void	dclfunct(Type*, Sym*);
66380ee5cbfSDavid du Colombier 
66480ee5cbfSDavid du Colombier /*
6653e12c5d1SDavid du Colombier  * sub.c
6663e12c5d1SDavid du Colombier  */
6673e12c5d1SDavid du Colombier void	arith(Node*, int);
66840d01547SDavid du Colombier int	castucom(Node*);
6699a747e4fSDavid du Colombier int	deadheads(Node*);
67080ee5cbfSDavid du Colombier Type*	dotsearch(Sym*, Type*, Node*, long*);
6713e12c5d1SDavid du Colombier long	dotoffset(Type*, Type*, Node*);
6723e12c5d1SDavid du Colombier void	gethunk(void);
6733e12c5d1SDavid du Colombier Node*	invert(Node*);
6743e12c5d1SDavid du Colombier int	bitno(long);
6753e12c5d1SDavid du Colombier void	makedot(Node*, Type*, long);
676ce941d97SDavid du Colombier int	mixedasop(Type*, Type*);
6773e12c5d1SDavid du Colombier Node*	new(int, Node*, Node*);
6783e12c5d1SDavid du Colombier Node*	new1(int, Node*, Node*);
6793e12c5d1SDavid du Colombier int	nilcast(Type*, Type*);
6803e12c5d1SDavid du Colombier int	nocast(Type*, Type*);
6813e12c5d1SDavid du Colombier void	prtree(Node*, char*);
6823e12c5d1SDavid du Colombier void	prtree1(Node*, int, int);
6833e12c5d1SDavid du Colombier void	relcon(Node*, Node*);
6843e12c5d1SDavid du Colombier int	relindex(int);
6857dd7cddfSDavid du Colombier int	simpleg(long);
6867dd7cddfSDavid du Colombier Type*	garbt(Type*, long);
6873e12c5d1SDavid du Colombier int	simplec(long);
6883e12c5d1SDavid du Colombier Type*	simplet(long);
6893e12c5d1SDavid du Colombier int	stcompat(Node*, Type*, Type*, long[]);
6903e12c5d1SDavid du Colombier int	tcompat(Node*, Type*, Type*, long[]);
6917dd7cddfSDavid du Colombier void	tinit(void);
6923e12c5d1SDavid du Colombier Type*	typ(int, Type*);
69380ee5cbfSDavid du Colombier Type*	copytyp(Type*);
6943e12c5d1SDavid du Colombier void	typeext(Type*, Node*);
695219b2ee8SDavid du Colombier void	typeext1(Type*, Node*);
6963e12c5d1SDavid du Colombier int	side(Node*);
6973e12c5d1SDavid du Colombier int	vconst(Node*);
698282e677fSDavid du Colombier int	log2(uvlong);
6997dd7cddfSDavid du Colombier int	vlog(Node*);
7007dd7cddfSDavid du Colombier int	topbit(ulong);
701375daca8SDavid du Colombier void	simplifyshift(Node*);
7027dd7cddfSDavid du Colombier long	typebitor(long, long);
7033e12c5d1SDavid du Colombier void	diag(Node*, char*, ...);
7043e12c5d1SDavid du Colombier void	warn(Node*, char*, ...);
7053e12c5d1SDavid du Colombier void	yyerror(char*, ...);
706375daca8SDavid du Colombier void	fatal(Node*, char*, ...);
7073e12c5d1SDavid du Colombier 
7083e12c5d1SDavid du Colombier /*
709219b2ee8SDavid du Colombier  * acid.c
710219b2ee8SDavid du Colombier  */
711219b2ee8SDavid du Colombier void	acidtype(Type*);
712219b2ee8SDavid du Colombier void	acidvar(Sym*);
713219b2ee8SDavid du Colombier 
714219b2ee8SDavid du Colombier /*
71580ee5cbfSDavid du Colombier  * pickle.c
71680ee5cbfSDavid du Colombier  */
71780ee5cbfSDavid du Colombier void	pickletype(Type*);
71880ee5cbfSDavid du Colombier 
71980ee5cbfSDavid du Colombier /*
7207dd7cddfSDavid du Colombier  * bits.c
7217dd7cddfSDavid du Colombier  */
7227dd7cddfSDavid du Colombier Bits	bor(Bits, Bits);
7237dd7cddfSDavid du Colombier Bits	band(Bits, Bits);
7247dd7cddfSDavid du Colombier Bits	bnot(Bits);
7257dd7cddfSDavid du Colombier int	bany(Bits*);
7267dd7cddfSDavid du Colombier int	bnum(Bits);
7277dd7cddfSDavid du Colombier Bits	blsh(uint);
7287dd7cddfSDavid du Colombier int	beq(Bits, Bits);
7297dd7cddfSDavid du Colombier int	bset(Bits, uint);
7307dd7cddfSDavid du Colombier 
7317dd7cddfSDavid du Colombier /*
7327dd7cddfSDavid du Colombier  * dpchk.c
7337dd7cddfSDavid du Colombier  */
7347dd7cddfSDavid du Colombier void	dpcheck(Node*);
7357dd7cddfSDavid du Colombier void	arginit(void);
7367dd7cddfSDavid du Colombier void	pragvararg(void);
7379847521cSDavid du Colombier void	pragpack(void);
7387dd7cddfSDavid du Colombier void	pragfpround(void);
739e288d156SDavid du Colombier void pragprofile(void);
740375daca8SDavid du Colombier void	pragincomplete(void);
7417dd7cddfSDavid du Colombier 
7427dd7cddfSDavid du Colombier /*
7433e12c5d1SDavid du Colombier  * calls to machine depend part
7443e12c5d1SDavid du Colombier  */
7453e12c5d1SDavid du Colombier void	codgen(Node*, Node*);
7463e12c5d1SDavid du Colombier void	gclean(void);
7473e12c5d1SDavid du Colombier void	gextern(Sym*, Node*, long, long);
7483e12c5d1SDavid du Colombier void	ginit(void);
7493e12c5d1SDavid du Colombier long	outstring(char*, long);
75082726826SDavid du Colombier long	outlstring(TRune*, long);
7513e12c5d1SDavid du Colombier void	xcom(Node*);
7523e12c5d1SDavid du Colombier long	exreg(Type*);
7537dd7cddfSDavid du Colombier long	align(long, Type*, int);
7547dd7cddfSDavid du Colombier long	maxround(long, long);
7553e12c5d1SDavid du Colombier 
7563e12c5d1SDavid du Colombier extern	schar	ewidth[];
757219b2ee8SDavid du Colombier 
758219b2ee8SDavid du Colombier /*
759219b2ee8SDavid du Colombier  * com64
760219b2ee8SDavid du Colombier  */
761219b2ee8SDavid du Colombier int	com64(Node*);
762219b2ee8SDavid du Colombier void	com64init(void);
763219b2ee8SDavid du Colombier void	bool64(Node*);
764219b2ee8SDavid du Colombier double	convvtof(vlong);
765219b2ee8SDavid du Colombier vlong	convftov(double);
766219b2ee8SDavid du Colombier double	convftox(double, int);
767219b2ee8SDavid du Colombier vlong	convvtox(vlong, int);
7687dd7cddfSDavid du Colombier 
769da51d93aSDavid du Colombier /*
770da51d93aSDavid du Colombier  * machcap
771da51d93aSDavid du Colombier  */
772da51d93aSDavid du Colombier int	machcap(Node*);
773da51d93aSDavid du Colombier 
7747dd7cddfSDavid du Colombier #pragma	varargck	argpos	warn	2
7757dd7cddfSDavid du Colombier #pragma	varargck	argpos	diag	2
7767dd7cddfSDavid du Colombier #pragma	varargck	argpos	yyerror	1
7777dd7cddfSDavid du Colombier 
7787dd7cddfSDavid du Colombier #pragma	varargck	type	"F"	Node*
7797dd7cddfSDavid du Colombier #pragma	varargck	type	"L"	long
7807dd7cddfSDavid du Colombier #pragma	varargck	type	"Q"	long
7817dd7cddfSDavid du Colombier #pragma	varargck	type	"O"	int
7827dd7cddfSDavid du Colombier #pragma	varargck	type	"T"	Type*
7837dd7cddfSDavid du Colombier #pragma	varargck	type	"|"	int
784