xref: /plan9/sys/src/cmd/cc/cc.h (revision 4ac975e2e38b792d24bc60de7fce5e6173f046ea)
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 
233e12c5d1SDavid du Colombier #define	NHUNK		50000L
243e12c5d1SDavid du Colombier #define	BUFSIZ		8192
253e12c5d1SDavid du Colombier #define	NSYMB		500
263e12c5d1SDavid du Colombier #define	NHASH		1024
273e12c5d1SDavid du Colombier #define	STRINGSZ	200
283e12c5d1SDavid du Colombier #define	HISTSZ		20
293e12c5d1SDavid du Colombier #define YYMAXDEPTH	500
30219b2ee8SDavid du Colombier #define	NTERM		10
317dd7cddfSDavid du Colombier #define	MAXALIGN	7
32219b2ee8SDavid du Colombier 
337dd7cddfSDavid du Colombier #define	SIGN(n)		((vlong)1<<(n-1))
34219b2ee8SDavid du Colombier #define	MASK(n)		(SIGN(n)|(SIGN(n)-1))
353e12c5d1SDavid du Colombier 
367dd7cddfSDavid du Colombier #define	BITS	5
377dd7cddfSDavid du Colombier #define	NVAR	(BITS*sizeof(ulong)*8)
387dd7cddfSDavid du Colombier struct	Bits
397dd7cddfSDavid du Colombier {
407dd7cddfSDavid du Colombier 	ulong	b[BITS];
417dd7cddfSDavid du Colombier };
423e12c5d1SDavid du Colombier 
433e12c5d1SDavid du Colombier struct	Node
443e12c5d1SDavid du Colombier {
453e12c5d1SDavid du Colombier 	Node*	left;
463e12c5d1SDavid du Colombier 	Node*	right;
47219b2ee8SDavid du Colombier 	void*	label;
48219b2ee8SDavid du Colombier 	long	pc;
49219b2ee8SDavid du Colombier 	int	reg;
50219b2ee8SDavid du Colombier 	long	xoffset;
51219b2ee8SDavid du Colombier 	double	fconst;		/* fp constant */
52219b2ee8SDavid du Colombier 	vlong	vconst;		/* non fp const */
53219b2ee8SDavid du Colombier 	char*	cstring;	/* character string */
54219b2ee8SDavid du Colombier 	ushort*	rstring;	/* rune string */
557dd7cddfSDavid du Colombier 
563e12c5d1SDavid du Colombier 	Sym*	sym;
573e12c5d1SDavid du Colombier 	Type*	type;
583e12c5d1SDavid du Colombier 	long	lineno;
593e12c5d1SDavid du Colombier 	char	op;
6022a127bbSDavid du Colombier 	char	oldop;
6122a127bbSDavid du Colombier 	char xcast;
623e12c5d1SDavid du Colombier 	char	class;
633e12c5d1SDavid du Colombier 	char	etype;
643e12c5d1SDavid du Colombier 	char	complex;
653e12c5d1SDavid du Colombier 	char	addable;
663e12c5d1SDavid du Colombier 	char	scale;
677dd7cddfSDavid du Colombier 	char	garb;
683e12c5d1SDavid du Colombier };
693e12c5d1SDavid du Colombier #define	Z	((Node*)0)
703e12c5d1SDavid du Colombier 
713e12c5d1SDavid du Colombier struct	Sym
723e12c5d1SDavid du Colombier {
733e12c5d1SDavid du Colombier 	Sym*	link;
743e12c5d1SDavid du Colombier 	Type*	type;
753e12c5d1SDavid du Colombier 	Type*	suetag;
76219b2ee8SDavid du Colombier 	Type*	tenum;
773e12c5d1SDavid du Colombier 	char*	macro;
783e12c5d1SDavid du Colombier 	long	varlineno;
793e12c5d1SDavid du Colombier 	long	offset;
80219b2ee8SDavid du Colombier 	vlong	vconst;
81219b2ee8SDavid du Colombier 	double	fconst;
823e12c5d1SDavid du Colombier 	Node*	label;
833e12c5d1SDavid du Colombier 	ushort	lexical;
84219b2ee8SDavid du Colombier 	char	*name;
859a747e4fSDavid du Colombier 	ushort	block;
869a747e4fSDavid du Colombier 	ushort	sueblock;
873e12c5d1SDavid du Colombier 	char	class;
883e12c5d1SDavid du Colombier 	char	sym;
893e12c5d1SDavid du Colombier 	char	aused;
90375daca8SDavid du Colombier 	char	sig;
913e12c5d1SDavid du Colombier };
923e12c5d1SDavid du Colombier #define	S	((Sym*)0)
933e12c5d1SDavid du Colombier 
94375daca8SDavid du Colombier enum{
95375daca8SDavid du Colombier 	SIGNONE = 0,
96375daca8SDavid du Colombier 	SIGDONE = 1,
97375daca8SDavid du Colombier 	SIGINTERN = 2,
98375daca8SDavid du Colombier 
99375daca8SDavid du Colombier 	SIGNINTERN = 1729*325*1729,
100375daca8SDavid du Colombier };
101375daca8SDavid du Colombier 
1023e12c5d1SDavid du Colombier struct	Decl
1033e12c5d1SDavid du Colombier {
1043e12c5d1SDavid du Colombier 	Decl*	link;
1053e12c5d1SDavid du Colombier 	Sym*	sym;
1063e12c5d1SDavid du Colombier 	Type*	type;
1073e12c5d1SDavid du Colombier 	long	varlineno;
1083e12c5d1SDavid du Colombier 	long	offset;
1093e12c5d1SDavid du Colombier 	short	val;
1109a747e4fSDavid du Colombier 	ushort	block;
1113e12c5d1SDavid du Colombier 	char	class;
1123e12c5d1SDavid du Colombier 	char	aused;
1133e12c5d1SDavid du Colombier };
1143e12c5d1SDavid du Colombier #define	D	((Decl*)0)
1153e12c5d1SDavid du Colombier 
1163e12c5d1SDavid du Colombier struct	Type
1173e12c5d1SDavid du Colombier {
1183e12c5d1SDavid du Colombier 	Sym*	sym;
1193e12c5d1SDavid du Colombier 	Sym*	tag;
12080ee5cbfSDavid du Colombier 	Funct*	funct;
1213e12c5d1SDavid du Colombier 	Type*	link;
1223e12c5d1SDavid du Colombier 	Type*	down;
1233e12c5d1SDavid du Colombier 	long	width;
1243e12c5d1SDavid du Colombier 	long	offset;
1253e12c5d1SDavid du Colombier 	long	lineno;
1263e12c5d1SDavid du Colombier 	char	shift;
1273e12c5d1SDavid du Colombier 	char	nbits;
1283e12c5d1SDavid du Colombier 	char	etype;
1297dd7cddfSDavid du Colombier 	char	garb;
1303e12c5d1SDavid du Colombier };
13180ee5cbfSDavid du Colombier 
1323e12c5d1SDavid du Colombier #define	T	((Type*)0)
1333e12c5d1SDavid du Colombier #define	NODECL	((void(*)(int, Type*, Sym*))0)
1343e12c5d1SDavid du Colombier 
1357dd7cddfSDavid du Colombier struct	Init			/* general purpose initialization */
1367dd7cddfSDavid du Colombier {
1377dd7cddfSDavid du Colombier 	int	code;
1387dd7cddfSDavid du Colombier 	ulong	value;
1397dd7cddfSDavid du Colombier 	char*	s;
1407dd7cddfSDavid du Colombier };
1417dd7cddfSDavid du Colombier 
1427dd7cddfSDavid du Colombier EXTERN struct
1433e12c5d1SDavid du Colombier {
1443e12c5d1SDavid du Colombier 	char*	p;
1453e12c5d1SDavid du Colombier 	int	c;
1463e12c5d1SDavid du Colombier } fi;
1473e12c5d1SDavid du Colombier 
1483e12c5d1SDavid du Colombier struct	Io
1493e12c5d1SDavid du Colombier {
1503e12c5d1SDavid du Colombier 	Io*	link;
1513e12c5d1SDavid du Colombier 	char*	p;
1523e12c5d1SDavid du Colombier 	char	b[BUFSIZ];
1533e12c5d1SDavid du Colombier 	short	c;
1543e12c5d1SDavid du Colombier 	short	f;
1553e12c5d1SDavid du Colombier };
1563e12c5d1SDavid du Colombier #define	I	((Io*)0)
1573e12c5d1SDavid du Colombier 
1583e12c5d1SDavid du Colombier struct	Hist
1593e12c5d1SDavid du Colombier {
1603e12c5d1SDavid du Colombier 	Hist*	link;
1613e12c5d1SDavid du Colombier 	char*	name;
1623e12c5d1SDavid du Colombier 	long	line;
1633e12c5d1SDavid du Colombier 	long	offset;
1643e12c5d1SDavid du Colombier };
1653e12c5d1SDavid du Colombier #define	H	((Hist*)0)
1667dd7cddfSDavid du Colombier EXTERN Hist*	hist;
1673e12c5d1SDavid du Colombier 
168219b2ee8SDavid du Colombier struct	Term
169219b2ee8SDavid du Colombier {
170219b2ee8SDavid du Colombier 	vlong	mult;
171219b2ee8SDavid du Colombier 	Node	*node;
172219b2ee8SDavid du Colombier };
173219b2ee8SDavid du Colombier 
1743e12c5d1SDavid du Colombier enum
1753e12c5d1SDavid du Colombier {
1767dd7cddfSDavid du Colombier 	Axxx,
1777dd7cddfSDavid du Colombier 	Ael1,
1787dd7cddfSDavid du Colombier 	Ael2,
1797dd7cddfSDavid du Colombier 	Asu2,
1807dd7cddfSDavid du Colombier 	Aarg0,
1817dd7cddfSDavid du Colombier 	Aarg1,
1827dd7cddfSDavid du Colombier 	Aarg2,
1837dd7cddfSDavid du Colombier 	Aaut3,
1847dd7cddfSDavid du Colombier 	NALIGN,
1857dd7cddfSDavid du Colombier };
1867dd7cddfSDavid du Colombier 
1877dd7cddfSDavid du Colombier enum				/* also in ../{8a,0a}.h */
1887dd7cddfSDavid du Colombier {
1897dd7cddfSDavid du Colombier 	Plan9	= 1<<0,
1907dd7cddfSDavid du Colombier 	Unix	= 1<<1,
1917dd7cddfSDavid du Colombier 	Windows	= 1<<2,
1927dd7cddfSDavid du Colombier };
1937dd7cddfSDavid du Colombier 
1947dd7cddfSDavid du Colombier enum
1957dd7cddfSDavid du Colombier {
1963e12c5d1SDavid du Colombier 	DMARK,
1973e12c5d1SDavid du Colombier 	DAUTO,
1983e12c5d1SDavid du Colombier 	DSUE,
1993e12c5d1SDavid du Colombier 	DLABEL,
2003e12c5d1SDavid du Colombier };
2013e12c5d1SDavid du Colombier enum
2023e12c5d1SDavid du Colombier {
2033e12c5d1SDavid du Colombier 	OXXX,
2047dd7cddfSDavid du Colombier 	OADD,
2057dd7cddfSDavid du Colombier 	OADDR,
2067dd7cddfSDavid du Colombier 	OAND,
2077dd7cddfSDavid du Colombier 	OANDAND,
2087dd7cddfSDavid du Colombier 	OARRAY,
2097dd7cddfSDavid du Colombier 	OAS,
2107dd7cddfSDavid du Colombier 	OASI,
2117dd7cddfSDavid du Colombier 	OASADD,
2127dd7cddfSDavid du Colombier 	OASAND,
2137dd7cddfSDavid du Colombier 	OASASHL,
2147dd7cddfSDavid du Colombier 	OASASHR,
2157dd7cddfSDavid du Colombier 	OASDIV,
2167dd7cddfSDavid du Colombier 	OASHL,
2177dd7cddfSDavid du Colombier 	OASHR,
2187dd7cddfSDavid du Colombier 	OASLDIV,
2197dd7cddfSDavid du Colombier 	OASLMOD,
2207dd7cddfSDavid du Colombier 	OASLMUL,
2217dd7cddfSDavid du Colombier 	OASLSHR,
2227dd7cddfSDavid du Colombier 	OASMOD,
2237dd7cddfSDavid du Colombier 	OASMUL,
2247dd7cddfSDavid du Colombier 	OASOR,
2257dd7cddfSDavid du Colombier 	OASSUB,
2267dd7cddfSDavid du Colombier 	OASXOR,
2277dd7cddfSDavid du Colombier 	OBIT,
2287dd7cddfSDavid du Colombier 	OBREAK,
2297dd7cddfSDavid du Colombier 	OCASE,
2307dd7cddfSDavid du Colombier 	OCAST,
2317dd7cddfSDavid du Colombier 	OCOMMA,
2327dd7cddfSDavid du Colombier 	OCOND,
2337dd7cddfSDavid du Colombier 	OCONST,
2347dd7cddfSDavid du Colombier 	OCONTINUE,
2357dd7cddfSDavid du Colombier 	ODIV,
2367dd7cddfSDavid du Colombier 	ODOT,
2377dd7cddfSDavid du Colombier 	ODOTDOT,
2387dd7cddfSDavid du Colombier 	ODWHILE,
2397dd7cddfSDavid du Colombier 	OENUM,
2407dd7cddfSDavid du Colombier 	OEQ,
2417dd7cddfSDavid du Colombier 	OFOR,
2427dd7cddfSDavid du Colombier 	OFUNC,
2437dd7cddfSDavid du Colombier 	OGE,
2447dd7cddfSDavid du Colombier 	OGOTO,
2457dd7cddfSDavid du Colombier 	OGT,
2467dd7cddfSDavid du Colombier 	OHI,
2477dd7cddfSDavid du Colombier 	OHS,
2487dd7cddfSDavid du Colombier 	OIF,
2497dd7cddfSDavid du Colombier 	OIND,
2507dd7cddfSDavid du Colombier 	OINDREG,
2517dd7cddfSDavid du Colombier 	OINIT,
2527dd7cddfSDavid du Colombier 	OLABEL,
2537dd7cddfSDavid du Colombier 	OLDIV,
2547dd7cddfSDavid du Colombier 	OLE,
2557dd7cddfSDavid du Colombier 	OLIST,
2567dd7cddfSDavid du Colombier 	OLMOD,
2577dd7cddfSDavid du Colombier 	OLMUL,
2587dd7cddfSDavid du Colombier 	OLO,
2597dd7cddfSDavid du Colombier 	OLS,
2607dd7cddfSDavid du Colombier 	OLSHR,
2617dd7cddfSDavid du Colombier 	OLT,
2627dd7cddfSDavid du Colombier 	OMOD,
2637dd7cddfSDavid du Colombier 	OMUL,
2647dd7cddfSDavid du Colombier 	ONAME,
2657dd7cddfSDavid du Colombier 	ONE,
2667dd7cddfSDavid du Colombier 	ONOT,
2677dd7cddfSDavid du Colombier 	OOR,
2687dd7cddfSDavid du Colombier 	OOROR,
2697dd7cddfSDavid du Colombier 	OPOSTDEC,
2707dd7cddfSDavid du Colombier 	OPOSTINC,
2717dd7cddfSDavid du Colombier 	OPREDEC,
2727dd7cddfSDavid du Colombier 	OPREINC,
2737dd7cddfSDavid du Colombier 	OPROTO,
2747dd7cddfSDavid du Colombier 	OREGISTER,
2757dd7cddfSDavid du Colombier 	ORETURN,
2767dd7cddfSDavid du Colombier 	OSET,
2777dd7cddfSDavid du Colombier 	OSIGN,
2787dd7cddfSDavid du Colombier 	OSIZE,
2797dd7cddfSDavid du Colombier 	OSTRING,
2807dd7cddfSDavid du Colombier 	OLSTRING,
2817dd7cddfSDavid du Colombier 	OSTRUCT,
2827dd7cddfSDavid du Colombier 	OSUB,
2837dd7cddfSDavid du Colombier 	OSWITCH,
2847dd7cddfSDavid du Colombier 	OUNION,
2857dd7cddfSDavid du Colombier 	OUSED,
2867dd7cddfSDavid du Colombier 	OWHILE,
2877dd7cddfSDavid du Colombier 	OXOR,
2887dd7cddfSDavid du Colombier 	ONEG,
2897dd7cddfSDavid du Colombier 	OCOM,
29080ee5cbfSDavid du Colombier 	OPOS,
2917dd7cddfSDavid du Colombier 	OELEM,
2927dd7cddfSDavid du Colombier 
2937dd7cddfSDavid du Colombier 	OTST,		/* used in some compilers */
2947dd7cddfSDavid du Colombier 	OINDEX,
2957dd7cddfSDavid du Colombier 	OFAS,
296da51d93aSDavid du Colombier 	OREGPAIR,
2977dd7cddfSDavid du Colombier 
2987dd7cddfSDavid du Colombier 	OEND
2993e12c5d1SDavid du Colombier };
3003e12c5d1SDavid du Colombier enum
3013e12c5d1SDavid du Colombier {
3023e12c5d1SDavid du Colombier 	TXXX,
3037dd7cddfSDavid du Colombier 	TCHAR,
3047dd7cddfSDavid du Colombier 	TUCHAR,
3057dd7cddfSDavid du Colombier 	TSHORT,
3067dd7cddfSDavid du Colombier 	TUSHORT,
3077dd7cddfSDavid du Colombier 	TINT,
3087dd7cddfSDavid du Colombier 	TUINT,
3097dd7cddfSDavid du Colombier 	TLONG,
3107dd7cddfSDavid du Colombier 	TULONG,
3117dd7cddfSDavid du Colombier 	TVLONG,
3127dd7cddfSDavid du Colombier 	TUVLONG,
3137dd7cddfSDavid du Colombier 	TFLOAT,
3147dd7cddfSDavid du Colombier 	TDOUBLE,
3157dd7cddfSDavid du Colombier 	TIND,
3167dd7cddfSDavid du Colombier 	TFUNC,
3177dd7cddfSDavid du Colombier 	TARRAY,
3187dd7cddfSDavid du Colombier 	TVOID,
3197dd7cddfSDavid du Colombier 	TSTRUCT,
3207dd7cddfSDavid du Colombier 	TUNION,
3217dd7cddfSDavid du Colombier 	TENUM,
3227dd7cddfSDavid du Colombier 	NTYPE,
3237dd7cddfSDavid du Colombier 
3247dd7cddfSDavid du Colombier 	TAUTO	= NTYPE,
3257dd7cddfSDavid du Colombier 	TEXTERN,
3267dd7cddfSDavid du Colombier 	TSTATIC,
3277dd7cddfSDavid du Colombier 	TTYPEDEF,
32880ee5cbfSDavid du Colombier 	TTYPESTR,
3297dd7cddfSDavid du Colombier 	TREGISTER,
3307dd7cddfSDavid du Colombier 	TCONSTNT,
3317dd7cddfSDavid du Colombier 	TVOLATILE,
3327dd7cddfSDavid du Colombier 	TUNSIGNED,
3337dd7cddfSDavid du Colombier 	TSIGNED,
3347dd7cddfSDavid du Colombier 	TDOT,
3357dd7cddfSDavid du Colombier 	TFILE,
3367dd7cddfSDavid du Colombier 	TOLD,
3377dd7cddfSDavid du Colombier 	NALLTYPES,
3383e12c5d1SDavid du Colombier };
3393e12c5d1SDavid du Colombier enum
3403e12c5d1SDavid du Colombier {
3413e12c5d1SDavid du Colombier 	CXXX,
3427dd7cddfSDavid du Colombier 	CAUTO,
3437dd7cddfSDavid du Colombier 	CEXTERN,
3447dd7cddfSDavid du Colombier 	CGLOBL,
3457dd7cddfSDavid du Colombier 	CSTATIC,
3467dd7cddfSDavid du Colombier 	CLOCAL,
3477dd7cddfSDavid du Colombier 	CTYPEDEF,
34880ee5cbfSDavid du Colombier 	CTYPESTR,
3497dd7cddfSDavid du Colombier 	CPARAM,
3507dd7cddfSDavid du Colombier 	CSELEM,
3517dd7cddfSDavid du Colombier 	CLABEL,
3527dd7cddfSDavid du Colombier 	CEXREG,
3537dd7cddfSDavid du Colombier 	NCTYPES,
3543e12c5d1SDavid du Colombier };
3553e12c5d1SDavid du Colombier enum
3563e12c5d1SDavid du Colombier {
3577dd7cddfSDavid du Colombier 	GXXX		= 0,
3587dd7cddfSDavid du Colombier 	GCONSTNT	= 1<<0,
3597dd7cddfSDavid du Colombier 	GVOLATILE	= 1<<1,
3607dd7cddfSDavid du Colombier 	NGTYPES		= 1<<2,
361375daca8SDavid du Colombier 
362375daca8SDavid du Colombier 	GINCOMPLETE	= 1<<2,
3637dd7cddfSDavid du Colombier };
3647dd7cddfSDavid du Colombier enum
3657dd7cddfSDavid du Colombier {
3663e12c5d1SDavid du Colombier 	BCHAR		= 1L<<TCHAR,
3673e12c5d1SDavid du Colombier 	BUCHAR		= 1L<<TUCHAR,
3683e12c5d1SDavid du Colombier 	BSHORT		= 1L<<TSHORT,
3693e12c5d1SDavid du Colombier 	BUSHORT		= 1L<<TUSHORT,
3707dd7cddfSDavid du Colombier 	BINT		= 1L<<TINT,
3717dd7cddfSDavid du Colombier 	BUINT		= 1L<<TUINT,
3723e12c5d1SDavid du Colombier 	BLONG		= 1L<<TLONG,
3733e12c5d1SDavid du Colombier 	BULONG		= 1L<<TULONG,
3743e12c5d1SDavid du Colombier 	BVLONG		= 1L<<TVLONG,
375219b2ee8SDavid du Colombier 	BUVLONG		= 1L<<TUVLONG,
3763e12c5d1SDavid du Colombier 	BFLOAT		= 1L<<TFLOAT,
3773e12c5d1SDavid du Colombier 	BDOUBLE		= 1L<<TDOUBLE,
3783e12c5d1SDavid du Colombier 	BIND		= 1L<<TIND,
3797dd7cddfSDavid du Colombier 	BFUNC		= 1L<<TFUNC,
3807dd7cddfSDavid du Colombier 	BARRAY		= 1L<<TARRAY,
3813e12c5d1SDavid du Colombier 	BVOID		= 1L<<TVOID,
3823e12c5d1SDavid du Colombier 	BSTRUCT		= 1L<<TSTRUCT,
3833e12c5d1SDavid du Colombier 	BUNION		= 1L<<TUNION,
3847dd7cddfSDavid du Colombier 	BENUM		= 1L<<TENUM,
3857dd7cddfSDavid du Colombier 	BFILE		= 1L<<TFILE,
3867dd7cddfSDavid du Colombier 	BDOT		= 1L<<TDOT,
3877dd7cddfSDavid du Colombier 	BCONSTNT	= 1L<<TCONSTNT,
3887dd7cddfSDavid du Colombier 	BVOLATILE	= 1L<<TVOLATILE,
3897dd7cddfSDavid du Colombier 	BUNSIGNED	= 1L<<TUNSIGNED,
3907dd7cddfSDavid du Colombier 	BSIGNED		= 1L<<TSIGNED,
3917dd7cddfSDavid du Colombier 	BAUTO		= 1L<<TAUTO,
3927dd7cddfSDavid du Colombier 	BEXTERN		= 1L<<TEXTERN,
3937dd7cddfSDavid du Colombier 	BSTATIC		= 1L<<TSTATIC,
3947dd7cddfSDavid du Colombier 	BTYPEDEF	= 1L<<TTYPEDEF,
39580ee5cbfSDavid du Colombier 	BTYPESTR	= 1L<<TTYPESTR,
3967dd7cddfSDavid du Colombier 	BREGISTER	= 1L<<TREGISTER,
3973e12c5d1SDavid du Colombier 
3987dd7cddfSDavid du Colombier 	BINTEGER	= BCHAR|BUCHAR|BSHORT|BUSHORT|BINT|BUINT|
3997dd7cddfSDavid du Colombier 				BLONG|BULONG|BVLONG|BUVLONG,
4003e12c5d1SDavid du Colombier 	BNUMBER		= BINTEGER|BFLOAT|BDOUBLE,
4013e12c5d1SDavid du Colombier 
4023e12c5d1SDavid du Colombier /* these can be overloaded with complex types */
4033e12c5d1SDavid du Colombier 
40480ee5cbfSDavid du Colombier 	BCLASS		= BAUTO|BEXTERN|BSTATIC|BTYPEDEF|BTYPESTR|BREGISTER,
4057dd7cddfSDavid du Colombier 	BGARB		= BCONSTNT|BVOLATILE,
4063e12c5d1SDavid du Colombier };
4073e12c5d1SDavid du Colombier 
40880ee5cbfSDavid du Colombier struct	Funct
40980ee5cbfSDavid du Colombier {
41080ee5cbfSDavid du Colombier 	Sym*	sym[OEND];
41180ee5cbfSDavid du Colombier 	Sym*	castto[NTYPE];
41280ee5cbfSDavid du Colombier 	Sym*	castfr[NTYPE];
41380ee5cbfSDavid du Colombier };
41480ee5cbfSDavid du Colombier 
4157dd7cddfSDavid du Colombier EXTERN struct
416219b2ee8SDavid du Colombier {
417219b2ee8SDavid du Colombier 	Type*	tenum;		/* type of entire enum */
418219b2ee8SDavid du Colombier 	Type*	cenum;		/* type of current enum run */
419219b2ee8SDavid du Colombier 	vlong	lastenum;	/* value of current enum */
420219b2ee8SDavid du Colombier 	double	floatenum;	/* value of current enum */
421219b2ee8SDavid du Colombier } en;
4223e12c5d1SDavid du Colombier 
4237dd7cddfSDavid du Colombier EXTERN	int	autobn;
4247dd7cddfSDavid du Colombier EXTERN	long	autoffset;
4257dd7cddfSDavid du Colombier EXTERN	int	blockno;
4267dd7cddfSDavid du Colombier EXTERN	Decl*	dclstack;
4277dd7cddfSDavid du Colombier EXTERN	char	debug[256];
4287dd7cddfSDavid du Colombier EXTERN	Hist*	ehist;
4297dd7cddfSDavid du Colombier EXTERN	long	firstbit;
4307dd7cddfSDavid du Colombier EXTERN	Sym*	firstarg;
4317dd7cddfSDavid du Colombier EXTERN	Type*	firstargtype;
4327dd7cddfSDavid du Colombier EXTERN	Decl*	firstdcl;
4337dd7cddfSDavid du Colombier EXTERN	int	fperror;
4347dd7cddfSDavid du Colombier EXTERN	Sym*	hash[NHASH];
4357dd7cddfSDavid du Colombier EXTERN	char*	hunk;
4367dd7cddfSDavid du Colombier EXTERN	char*	include[20];
4377dd7cddfSDavid du Colombier EXTERN	Io*	iofree;
4387dd7cddfSDavid du Colombier EXTERN	Io*	ionext;
4397dd7cddfSDavid du Colombier EXTERN	Io*	iostack;
4407dd7cddfSDavid du Colombier EXTERN	long	lastbit;
4417dd7cddfSDavid du Colombier EXTERN	char	lastclass;
4427dd7cddfSDavid du Colombier EXTERN	Type*	lastdcl;
4437dd7cddfSDavid du Colombier EXTERN	long	lastfield;
4447dd7cddfSDavid du Colombier EXTERN	Type*	lasttype;
4457dd7cddfSDavid du Colombier EXTERN	long	lineno;
4467dd7cddfSDavid du Colombier EXTERN	long	nearln;
4477dd7cddfSDavid du Colombier EXTERN	int	nerrors;
4487dd7cddfSDavid du Colombier EXTERN	int	newflag;
4497dd7cddfSDavid du Colombier EXTERN	long	nhunk;
4507dd7cddfSDavid du Colombier EXTERN	int	ninclude;
4517dd7cddfSDavid du Colombier EXTERN	Node*	nodproto;
4527dd7cddfSDavid du Colombier EXTERN	Node*	nodcast;
4537dd7cddfSDavid du Colombier EXTERN	Biobuf	outbuf;
45418027f8cSDavid du Colombier EXTERN	Biobuf	diagbuf;
4557dd7cddfSDavid du Colombier EXTERN	char*	outfile;
4567dd7cddfSDavid du Colombier EXTERN	char*	pathname;
4577dd7cddfSDavid du Colombier EXTERN	int	peekc;
4587dd7cddfSDavid du Colombier EXTERN	long	stkoff;
4597dd7cddfSDavid du Colombier EXTERN	Type*	strf;
4607dd7cddfSDavid du Colombier EXTERN	Type*	strl;
4617dd7cddfSDavid du Colombier EXTERN	char	symb[NSYMB];
4627dd7cddfSDavid du Colombier EXTERN	Sym*	symstring;
4637dd7cddfSDavid du Colombier EXTERN	int	taggen;
4647dd7cddfSDavid du Colombier EXTERN	Type*	tfield;
4657dd7cddfSDavid du Colombier EXTERN	Type*	tufield;
4667dd7cddfSDavid du Colombier EXTERN	int	thechar;
4677dd7cddfSDavid du Colombier EXTERN	char*	thestring;
4687dd7cddfSDavid du Colombier EXTERN	Type*	thisfn;
4697dd7cddfSDavid du Colombier EXTERN	long	thunk;
4707dd7cddfSDavid du Colombier EXTERN	Type*	types[NTYPE];
4717dd7cddfSDavid du Colombier EXTERN	Type*	fntypes[NTYPE];
4727dd7cddfSDavid du Colombier EXTERN	Node*	initlist;
4737dd7cddfSDavid du Colombier EXTERN	Term	term[NTERM];
4747dd7cddfSDavid du Colombier EXTERN	int	nterm;
4759847521cSDavid du Colombier EXTERN	int	packflg;
4767dd7cddfSDavid du Colombier EXTERN	int	fproundflg;
477e288d156SDavid du Colombier EXTERN	int	profileflg;
4787dd7cddfSDavid du Colombier EXTERN	Bits	zbits;
4797dd7cddfSDavid du Colombier 
4807dd7cddfSDavid du Colombier extern	char	*onames[], *tnames[], *gnames[];
4817dd7cddfSDavid du Colombier extern	char	*cnames[], *qnames[], *bnames[];
4823e12c5d1SDavid du Colombier extern	char	tab[NTYPE][NTYPE];
483219b2ee8SDavid du Colombier extern	char	comrel[], invrel[], logrel[];
4847dd7cddfSDavid du Colombier extern	long	ncast[], tadd[], tand[];
4853e12c5d1SDavid du Colombier extern	long	targ[], tasadd[], tasign[], tcast[];
4863e12c5d1SDavid du Colombier extern	long	tdot[], tfunct[], tindir[], tmul[];
4873e12c5d1SDavid du Colombier extern	long	tnot[], trel[], tsub[];
4883e12c5d1SDavid du Colombier 
489219b2ee8SDavid du Colombier extern	char	typeaf[];
490219b2ee8SDavid du Colombier extern	char	typefd[];
491219b2ee8SDavid du Colombier extern	char	typei[];
492219b2ee8SDavid du Colombier extern	char	typesu[];
493219b2ee8SDavid du Colombier extern	char	typesuv[];
494219b2ee8SDavid du Colombier extern	char	typeu[];
495219b2ee8SDavid du Colombier extern	char	typev[];
496219b2ee8SDavid du Colombier extern	char	typec[];
497219b2ee8SDavid du Colombier extern	char	typeh[];
4987dd7cddfSDavid du Colombier extern	char	typeil[];
4997dd7cddfSDavid du Colombier extern	char	typeilp[];
500219b2ee8SDavid du Colombier extern	char	typechl[];
501da51d93aSDavid du Colombier extern	char	typechlv[];
50222a127bbSDavid du Colombier extern	char	typechlvp[];
503219b2ee8SDavid du Colombier extern	char	typechlp[];
504219b2ee8SDavid du Colombier extern	char	typechlpfd[];
505219b2ee8SDavid du Colombier 
506*4ac975e2SDavid du Colombier EXTERN	char*	typeword;
507*4ac975e2SDavid du Colombier EXTERN	char*	typecmplx;
508*4ac975e2SDavid du Colombier 
5097dd7cddfSDavid du Colombier extern	ulong	thash1;
5107dd7cddfSDavid du Colombier extern	ulong	thash2;
5117dd7cddfSDavid du Colombier extern	ulong	thash3;
5127dd7cddfSDavid du Colombier extern	ulong	thash[];
5137dd7cddfSDavid du Colombier 
5143e12c5d1SDavid du Colombier /*
5157dd7cddfSDavid du Colombier  *	compat.c/unix.c/windows.c
5163e12c5d1SDavid du Colombier  */
5177dd7cddfSDavid du Colombier int	mywait(int*);
5183e12c5d1SDavid du Colombier int	mycreat(char*, int);
5197dd7cddfSDavid du Colombier int	systemtype(int);
5207dd7cddfSDavid du Colombier int	pathchar(void);
52180ee5cbfSDavid du Colombier int	myaccess(char*);
5227dd7cddfSDavid du Colombier char*	mygetwd(char*, int);
5237dd7cddfSDavid du Colombier int	myexec(char*, char*[]);
5247dd7cddfSDavid du Colombier int	mydup(int, int);
5257dd7cddfSDavid du Colombier int	myfork(void);
5267dd7cddfSDavid du Colombier int	mypipe(int*);
5277dd7cddfSDavid du Colombier void*	mysbrk(ulong);
5283e12c5d1SDavid du Colombier 
5293e12c5d1SDavid du Colombier /*
5303e12c5d1SDavid du Colombier  *	parser
5313e12c5d1SDavid du Colombier  */
5323e12c5d1SDavid du Colombier int	yyparse(void);
533219b2ee8SDavid du Colombier int	mpatov(char*, vlong*);
5343e12c5d1SDavid du Colombier 
5353e12c5d1SDavid du Colombier /*
5363e12c5d1SDavid du Colombier  *	lex.c
5373e12c5d1SDavid du Colombier  */
5387dd7cddfSDavid du Colombier void*	allocn(void*, long, long);
5397dd7cddfSDavid du Colombier void*	alloc(long);
5403e12c5d1SDavid du Colombier void	cinit(void);
5417dd7cddfSDavid du Colombier int	compile(char*, char**, int);
5423e12c5d1SDavid du Colombier void	errorexit(void);
5433e12c5d1SDavid du Colombier int	filbuf(void);
5443e12c5d1SDavid du Colombier int	getc(void);
5453e12c5d1SDavid du Colombier long	getr(void);
5463e12c5d1SDavid du Colombier int	getnsc(void);
5473e12c5d1SDavid du Colombier Sym*	lookup(void);
5483e12c5d1SDavid du Colombier void	main(int, char*[]);
5493e12c5d1SDavid du Colombier void	newfile(char*, int);
5503e12c5d1SDavid du Colombier void	newio(void);
5513e12c5d1SDavid du Colombier void	pushio(void);
5523e12c5d1SDavid du Colombier long	escchar(long, int, int);
5533e12c5d1SDavid du Colombier Sym*	slookup(char*);
5543e12c5d1SDavid du Colombier void	syminit(Sym*);
5553e12c5d1SDavid du Colombier void	unget(int);
5563e12c5d1SDavid du Colombier long	yylex(void);
5579a747e4fSDavid du Colombier int	Lconv(Fmt*);
5589a747e4fSDavid du Colombier int	Tconv(Fmt*);
5599a747e4fSDavid du Colombier int	FNconv(Fmt*);
5609a747e4fSDavid du Colombier int	Oconv(Fmt*);
5619a747e4fSDavid du Colombier int	Qconv(Fmt*);
5629a747e4fSDavid du Colombier int	VBconv(Fmt*);
5637dd7cddfSDavid du Colombier void	setinclude(char*);
5643e12c5d1SDavid du Colombier 
5653e12c5d1SDavid du Colombier /*
5663e12c5d1SDavid du Colombier  * mac.c
5673e12c5d1SDavid du Colombier  */
5683e12c5d1SDavid du Colombier void	dodefine(char*);
5693e12c5d1SDavid du Colombier void	domacro(void);
5703e12c5d1SDavid du Colombier Sym*	getsym(void);
5717dd7cddfSDavid du Colombier long	getnsn(void);
5723e12c5d1SDavid du Colombier void	linehist(char*, int);
5733e12c5d1SDavid du Colombier void	macdef(void);
5743e12c5d1SDavid du Colombier void	macprag(void);
5753e12c5d1SDavid du Colombier void	macend(void);
5763e12c5d1SDavid du Colombier void	macexpand(Sym*, char*);
5773e12c5d1SDavid du Colombier void	macif(int);
5783e12c5d1SDavid du Colombier void	macinc(void);
5793e12c5d1SDavid du Colombier void	maclin(void);
5803e12c5d1SDavid du Colombier void	macund(void);
5813e12c5d1SDavid du Colombier 
5823e12c5d1SDavid du Colombier /*
5833e12c5d1SDavid du Colombier  * dcl.c
5843e12c5d1SDavid du Colombier  */
5853e12c5d1SDavid du Colombier Node*	doinit(Sym*, Type*, long, Node*);
5863e12c5d1SDavid du Colombier Type*	tcopy(Type*);
5873e12c5d1SDavid du Colombier Node*	init1(Sym*, Type*, long, int);
5883e12c5d1SDavid du Colombier Node*	newlist(Node*, Node*);
5893e12c5d1SDavid du Colombier void	adecl(int, Type*, Sym*);
5903e12c5d1SDavid du Colombier int	anyproto(Node*);
5913e12c5d1SDavid du Colombier void	argmark(Node*, int);
5923e12c5d1SDavid du Colombier void	dbgdecl(Sym*);
5933e12c5d1SDavid du Colombier Node*	dcllabel(Sym*, int);
5943e12c5d1SDavid du Colombier Node*	dodecl(void(*)(int, Type*, Sym*), int, Type*, Node*);
5953e12c5d1SDavid du Colombier Sym*	mkstatic(Sym*);
5963e12c5d1SDavid du Colombier void	doenum(Sym*, Node*);
5977dd7cddfSDavid du Colombier void	snap(Type*);
598219b2ee8SDavid du Colombier Type*	dotag(Sym*, int, int);
5993e12c5d1SDavid du Colombier void	edecl(int, Type*, Sym*);
6003e12c5d1SDavid du Colombier Type*	fnproto(Node*);
6013e12c5d1SDavid du Colombier Type*	fnproto1(Node*);
6023e12c5d1SDavid du Colombier void	markdcl(void);
6033e12c5d1SDavid du Colombier Type*	paramconv(Type*, int);
6043e12c5d1SDavid du Colombier void	pdecl(int, Type*, Sym*);
6053e12c5d1SDavid du Colombier Decl*	push(void);
6063e12c5d1SDavid du Colombier Decl*	push1(Sym*);
6077dd7cddfSDavid du Colombier Node*	revertdcl(void);
6087dd7cddfSDavid du Colombier long	round(long, int);
6097dd7cddfSDavid du Colombier int	rsametype(Type*, Type*, int, int);
6103e12c5d1SDavid du Colombier int	sametype(Type*, Type*);
611375daca8SDavid du Colombier ulong	sign(Sym*);
612375daca8SDavid du Colombier ulong	signature(Type*);
6133e12c5d1SDavid du Colombier void	suallign(Type*);
6143e12c5d1SDavid du Colombier void	tmerge(Type*, Sym*);
6153e12c5d1SDavid du Colombier void	walkparam(Node*, int);
6163e12c5d1SDavid du Colombier void	xdecl(int, Type*, Sym*);
6173e12c5d1SDavid du Colombier Node*	contig(Sym*, Node*, long);
6183e12c5d1SDavid du Colombier 
6193e12c5d1SDavid du Colombier /*
6203e12c5d1SDavid du Colombier  * com.c
6213e12c5d1SDavid du Colombier  */
6223e12c5d1SDavid du Colombier void	ccom(Node*);
6233e12c5d1SDavid du Colombier void	complex(Node*);
6243e12c5d1SDavid du Colombier int	tcom(Node*);
6253e12c5d1SDavid du Colombier int	tcoma(Node*, Node*, Type*, int);
6263e12c5d1SDavid du Colombier int	tcomd(Node*);
6273e12c5d1SDavid du Colombier int	tcomo(Node*, int);
6283e12c5d1SDavid du Colombier int	tcomx(Node*);
6293e12c5d1SDavid du Colombier int	tlvalue(Node*);
6307dd7cddfSDavid du Colombier void	constas(Node*, Type*, Type*);
6313e12c5d1SDavid du Colombier 
6323e12c5d1SDavid du Colombier /*
6333e12c5d1SDavid du Colombier  * con.c
6343e12c5d1SDavid du Colombier  */
6353e12c5d1SDavid du Colombier void	acom(Node*);
636219b2ee8SDavid du Colombier void	acom1(vlong, Node*);
6373e12c5d1SDavid du Colombier void	acom2(Node*, Type*);
6387dd7cddfSDavid du Colombier int	acomcmp1(const void*, const void*);
6397dd7cddfSDavid du Colombier int	acomcmp2(const void*, const void*);
6403e12c5d1SDavid du Colombier int	addo(Node*);
6413e12c5d1SDavid du Colombier void	evconst(Node*);
6423e12c5d1SDavid du Colombier 
6433e12c5d1SDavid du Colombier /*
64480ee5cbfSDavid du Colombier  * funct.c
64580ee5cbfSDavid du Colombier  */
64680ee5cbfSDavid du Colombier int	isfunct(Node*);
64780ee5cbfSDavid du Colombier void	dclfunct(Type*, Sym*);
64880ee5cbfSDavid du Colombier 
64980ee5cbfSDavid du Colombier /*
6503e12c5d1SDavid du Colombier  * sub.c
6513e12c5d1SDavid du Colombier  */
6523e12c5d1SDavid du Colombier void	arith(Node*, int);
6539a747e4fSDavid du Colombier int	deadheads(Node*);
65480ee5cbfSDavid du Colombier Type*	dotsearch(Sym*, Type*, Node*, long*);
6553e12c5d1SDavid du Colombier long	dotoffset(Type*, Type*, Node*);
6563e12c5d1SDavid du Colombier void	gethunk(void);
6573e12c5d1SDavid du Colombier Node*	invert(Node*);
6583e12c5d1SDavid du Colombier int	bitno(long);
6593e12c5d1SDavid du Colombier void	makedot(Node*, Type*, long);
660ce941d97SDavid du Colombier int	mixedasop(Type*, Type*);
6613e12c5d1SDavid du Colombier Node*	new(int, Node*, Node*);
6623e12c5d1SDavid du Colombier Node*	new1(int, Node*, Node*);
6633e12c5d1SDavid du Colombier int	nilcast(Type*, Type*);
6643e12c5d1SDavid du Colombier int	nocast(Type*, Type*);
6653e12c5d1SDavid du Colombier void	prtree(Node*, char*);
6663e12c5d1SDavid du Colombier void	prtree1(Node*, int, int);
6673e12c5d1SDavid du Colombier void	relcon(Node*, Node*);
6683e12c5d1SDavid du Colombier int	relindex(int);
6697dd7cddfSDavid du Colombier int	simpleg(long);
6707dd7cddfSDavid du Colombier Type*	garbt(Type*, long);
6713e12c5d1SDavid du Colombier int	simplec(long);
6723e12c5d1SDavid du Colombier Type*	simplet(long);
6733e12c5d1SDavid du Colombier int	stcompat(Node*, Type*, Type*, long[]);
6743e12c5d1SDavid du Colombier int	tcompat(Node*, Type*, Type*, long[]);
6757dd7cddfSDavid du Colombier void	tinit(void);
6763e12c5d1SDavid du Colombier Type*	typ(int, Type*);
67780ee5cbfSDavid du Colombier Type*	copytyp(Type*);
6783e12c5d1SDavid du Colombier void	typeext(Type*, Node*);
679219b2ee8SDavid du Colombier void	typeext1(Type*, Node*);
6803e12c5d1SDavid du Colombier int	side(Node*);
6813e12c5d1SDavid du Colombier int	vconst(Node*);
682282e677fSDavid du Colombier int	log2(uvlong);
6837dd7cddfSDavid du Colombier int	vlog(Node*);
6847dd7cddfSDavid du Colombier int	topbit(ulong);
685375daca8SDavid du Colombier void	simplifyshift(Node*);
6867dd7cddfSDavid du Colombier long	typebitor(long, long);
6873e12c5d1SDavid du Colombier void	diag(Node*, char*, ...);
6883e12c5d1SDavid du Colombier void	warn(Node*, char*, ...);
6893e12c5d1SDavid du Colombier void	yyerror(char*, ...);
690375daca8SDavid du Colombier void	fatal(Node*, char*, ...);
6913e12c5d1SDavid du Colombier 
6923e12c5d1SDavid du Colombier /*
693219b2ee8SDavid du Colombier  * acid.c
694219b2ee8SDavid du Colombier  */
695219b2ee8SDavid du Colombier void	acidtype(Type*);
696219b2ee8SDavid du Colombier void	acidvar(Sym*);
697219b2ee8SDavid du Colombier 
698219b2ee8SDavid du Colombier /*
69980ee5cbfSDavid du Colombier  * pickle.c
70080ee5cbfSDavid du Colombier  */
70180ee5cbfSDavid du Colombier void	pickletype(Type*);
70280ee5cbfSDavid du Colombier 
70380ee5cbfSDavid du Colombier /*
7047dd7cddfSDavid du Colombier  * bits.c
7057dd7cddfSDavid du Colombier  */
7067dd7cddfSDavid du Colombier Bits	bor(Bits, Bits);
7077dd7cddfSDavid du Colombier Bits	band(Bits, Bits);
7087dd7cddfSDavid du Colombier Bits	bnot(Bits);
7097dd7cddfSDavid du Colombier int	bany(Bits*);
7107dd7cddfSDavid du Colombier int	bnum(Bits);
7117dd7cddfSDavid du Colombier Bits	blsh(uint);
7127dd7cddfSDavid du Colombier int	beq(Bits, Bits);
7137dd7cddfSDavid du Colombier int	bset(Bits, uint);
7147dd7cddfSDavid du Colombier 
7157dd7cddfSDavid du Colombier /*
7167dd7cddfSDavid du Colombier  * dpchk.c
7177dd7cddfSDavid du Colombier  */
7187dd7cddfSDavid du Colombier void	dpcheck(Node*);
7197dd7cddfSDavid du Colombier void	arginit(void);
7207dd7cddfSDavid du Colombier void	pragvararg(void);
7219847521cSDavid du Colombier void	pragpack(void);
7227dd7cddfSDavid du Colombier void	pragfpround(void);
723e288d156SDavid du Colombier void pragprofile(void);
724375daca8SDavid du Colombier void	pragincomplete(void);
7257dd7cddfSDavid du Colombier 
7267dd7cddfSDavid du Colombier /*
7273e12c5d1SDavid du Colombier  * calls to machine depend part
7283e12c5d1SDavid du Colombier  */
7293e12c5d1SDavid du Colombier void	codgen(Node*, Node*);
7303e12c5d1SDavid du Colombier void	gclean(void);
7313e12c5d1SDavid du Colombier void	gextern(Sym*, Node*, long, long);
7323e12c5d1SDavid du Colombier void	ginit(void);
7333e12c5d1SDavid du Colombier long	outstring(char*, long);
7343e12c5d1SDavid du Colombier long	outlstring(ushort*, long);
7353e12c5d1SDavid du Colombier void	sextern(Sym*, Node*, long, long);
7363e12c5d1SDavid du Colombier void	xcom(Node*);
7373e12c5d1SDavid du Colombier long	exreg(Type*);
7387dd7cddfSDavid du Colombier long	align(long, Type*, int);
7397dd7cddfSDavid du Colombier long	maxround(long, long);
7403e12c5d1SDavid du Colombier 
7413e12c5d1SDavid du Colombier extern	schar	ewidth[];
742219b2ee8SDavid du Colombier 
743219b2ee8SDavid du Colombier /*
744219b2ee8SDavid du Colombier  * com64
745219b2ee8SDavid du Colombier  */
746219b2ee8SDavid du Colombier int	com64(Node*);
747219b2ee8SDavid du Colombier void	com64init(void);
748219b2ee8SDavid du Colombier void	bool64(Node*);
749219b2ee8SDavid du Colombier double	convvtof(vlong);
750219b2ee8SDavid du Colombier vlong	convftov(double);
751219b2ee8SDavid du Colombier double	convftox(double, int);
752219b2ee8SDavid du Colombier vlong	convvtox(vlong, int);
7537dd7cddfSDavid du Colombier 
754da51d93aSDavid du Colombier /*
755da51d93aSDavid du Colombier  * machcap
756da51d93aSDavid du Colombier  */
757da51d93aSDavid du Colombier int	machcap(Node*);
758da51d93aSDavid du Colombier 
7597dd7cddfSDavid du Colombier #pragma	varargck	argpos	warn	2
7607dd7cddfSDavid du Colombier #pragma	varargck	argpos	diag	2
7617dd7cddfSDavid du Colombier #pragma	varargck	argpos	yyerror	1
7627dd7cddfSDavid du Colombier 
7637dd7cddfSDavid du Colombier #pragma	varargck	type	"F"	Node*
7647dd7cddfSDavid du Colombier #pragma	varargck	type	"L"	long
7657dd7cddfSDavid du Colombier #pragma	varargck	type	"Q"	long
7667dd7cddfSDavid du Colombier #pragma	varargck	type	"O"	int
7677dd7cddfSDavid du Colombier #pragma	varargck	type	"T"	Type*
7687dd7cddfSDavid du Colombier #pragma	varargck	type	"|"	int
769