pass2.h

来自「<B>Digital的Unix操作系统VAX 4.2源码</B>」· C头文件 代码 · 共 270 行

H
270
字号
/**	@(#)pass2.h	4.1	(ULTRIX)	7/17/90*//************************************************************************ *									* *			Copyright (c) 1986 by				* *		Digital Equipment Corporation, Maynard, MA		* *			All rights reserved.				* *									* *   This software is furnished under a license and may be used and	* *   copied  only  in accordance with the terms of such license and	* *   with the  inclusion  of  the  above  copyright  notice.   This	* *   software  or  any  other copies thereof may not be provided or	* *   otherwise made available to any other person.  No title to and	* *   ownership of the software is hereby transferred.			* *									* *   This software is  derived  from  software  received  from  the	* *   University    of   California,   Berkeley,   and   from   Bell	* *   Laboratories.  Use, duplication, or disclosure is  subject  to	* *   restrictions  under  license  agreements  with  University  of	* *   California and with AT&T.						* *									* *   The information in this software is subject to change  without	* *   notice  and should not be construed as a commitment by Digital	* *   Equipment Corporation.						* *									* *   Digital assumes no responsibility for the use  or  reliability	* *   of its software on equipment which is not supplied by Digital.	* *									* ************************************************************************//**************************************************************************			Modification History**	David Metsky		15-Jan-86** 001	Added from BSD 4.3 version as part of upgrade.**	Based on:	pss2.h		4.1		85/03/19**************************************************************************/#ifndef _PASS2_#define	_PASS2_#include "macdefs.h"#include "mac2defs.h"#include "manifest.h"/* cookies, used as arguments to codgen */#define FOREFF	01		/* compute for effects only */#define INAREG	02		/* compute into a register */#define INTAREG	04		/* compute into a scratch register */#define INBREG	010		/* compute into a lvalue register */#define INTBREG 020		/* compute into a scratch lvalue register */#define FORCC	040		/* compute for condition codes only */#define INTEMP	010000		/* compute into a temporary location */#define FORARG	020000		/* compute for an argument of a function */#define FORREW	040000		/* search the table for a rewrite rule *//* * OP descriptors, * the ASG operator may be used on some of these */#define OPSIMP	010000		/* +, -, &, |, ^ */#define OPCOMM	010002		/* +, &, |, ^ */#define OPMUL	010004		/* *, / */#define OPDIV	010006		/* /, % */#define OPUNARY	010010		/* unary ops */#define OPLEAF	010012		/* leaves */#define OPANY	010014		/* any op... */#define OPLOG	010016		/* logical ops */#define OPFLOAT	010020		/* +, -, *, or / (for floats) */#define OPSHFT	010022		/* <<, >> */#define OPLTYPE	010024		/* leaf type nodes (e.g, NAME, ICON, etc.) *//* match returns */#define MNOPE	010000		/* no match generated */#define MDONE	010001		/* done evalution *//* shapes */#define SANY	01		/* same as FOREFF */#define SAREG	02		/* same as INAREG */#define STAREG	04		/* same as INTAREG */#define SBREG	010		/* same as INBREG */#define STBREG	020		/* same as INTBREG */#define SCC	040		/* same as FORCC */#define SNAME	0100		/* name */#define SCON	0200		/* constant */#define SFLD	0400		/* field */#define SOREG	01000		/* offset from register *//* indirection or wild card shapes */#ifndef WCARD1#define STARNM	02000		/* indirect through name */#endif#ifndef WCARD2#define STARREG	04000		/* indirect through register */#endif#define SWADD	040000		/* word address */#define SPECIAL	0100000		/* special stuff (follows) */#define SZERO	SPECIAL		/* constant zero */#define SONE	(SPECIAL|1)	/* constant +1 */#define SMONE	(SPECIAL|2)	/* constant -1 */#define SCCON	(SPECIAL|3)	/* -256 <= constant < 256 */#define SSCON	(SPECIAL|4)	/* -32768 <= constant < 32768 */#define SSOREG	(SPECIAL|5)	/* non-indexed OREG *//* FORARG and INTEMP are carefully not conflicting with shapes *//* types */#define TCHAR		01	/* char */#define TSHORT		02	/* short */#define TINT		04	/* int */#define TLONG		010	/* long */#define TFLOAT		020	/* float */#define TDOUBLE		040	/* double */#define TPOINT		0100	/* pointer to something */#define TUCHAR		0200	/* unsigned char */#define TUSHORT		0400	/* unsigned short */#define TUNSIGNED	01000	/* unsigned int */#define TULONG		02000	/* unsigned long */#define TPTRTO		04000	/* pointer to one of the above */#define TANY		010000	/* matches anything within reason */#define TSTRUCT		020000	/* structure or union *//* reclamation cookies */#define RNULL		0	/* clobber result */#define RLEFT		01	/* reclaim left resource */#define RRIGHT		02	/* reclaim right resource */#define RESC1		04	/* reclaim resource allocated #1 */#define RESC2		010	/* reclaim resource allocated #2 */#define RESC3		020	/* reclaim resource allocated #3 */#define RESCC		04000	/* reclaim condition codes */#define RNOP		010000	/* DANGER: can cause loops.. *//* needs */#define NAREG		01	/* need an A register */#define NACOUNT		03	/* count mask of A registers */#define NAMASK		017	/* A register need field mask */#define NASL		04	/* need A register shared with left resource */#define NASR		010	/* need A register shared with right resource */#define NBREG		020	/* need a B register */#define NBCOUNT		060	/* count mask of B register */#define NBMASK		0360	/* B register need field mask */#define NBSL		0100	/* need B register shared with left resource */#define NBSR		0200	/* need B register shared with right resource */#define NTEMP		0400	/* need temporary storage location */#define NTMASK		07400	/* count mask of temporary storage locations */#define REWRITE		010000	/* need rewrite */#define EITHER		040000	/* allocate all resources or nothing */#define MUSTDO		010000	/* force register requirements */#ifndef NOPREF/* also defined in onepass.h */#define NOPREF		020000	/* no preference for register assignment */#endif/* register allocation */extern	int rstatus[];		/* register status info */extern	int busy[];		/* register use info */extern	struct respref {	int	cform;	int	mform;} respref[];			/* resource preference rules */#define isbreg(r)	(rstatus[r]&SBREG)#define istreg(r)	(rstatus[r]&(STBREG|STAREG))#define istnode(p)	(p->in.op==REG && istreg(p->tn.rval))#define TBUSY		01000	/* register temporarily busy (during alloc) */#define REGLOOP(i)	for (i = 0; i < REGSZ; ++i)extern	NODE *deltrees[DELAYS];	/* trees held for delayed evaluation */extern	int deli;		/* mmmmm */#define SETSTO(x,y)	(stotree = (x), stocook = (y))extern	int stocook;extern	NODE *stotree;extern	int callflag;extern	int fregs;#ifndef ONEPASS#include "ndu.h"#endifextern	NODE node[];/* code tables */extern	struct optab {	int	op;			/* operator to match */	int	visit;			/* goal to match */	int	lshape;			/* left shape to match */	int	ltype;			/* left type to match */	int	rshape;			/* right shape to match */	int	rtype;			/* right type to match */	int	needs;			/* resource required */	int	rewrite;		/* how to rewrite afterwards */	char	*cstring;		/* code generation template */} table[];extern	NODE resc[];extern	OFFSZ tmpoff;extern	OFFSZ maxoff;extern	OFFSZ baseoff;extern	OFFSZ maxtemp;extern	int maxtreg;extern	int ftnno;extern	int rtyflg;extern	int nrecur;		/* flag to keep track of recursions */extern	NODE	*talloc(),	*eread(),	*tcopy(),	*getlr();extern	CONSZ rdin();extern	int eprint();extern	char *rnames[];extern	int lineno;extern	char filename[];extern	int fldshf, fldsz;extern	int lflag, xdebug, udebug, edebug, odebug;extern	int rdebug, radebug, tdebug, sdebug;#ifdef FORTextern	int Oflag;#endif#ifndef callchk#define callchk(x) allchk()#endif#ifndef PUTCHAR#define PUTCHAR(x) putchar(x)#endif/* macros for doing double indexing */#define R2PACK(x,y,z)	(0200*((x)+1)+y+040000*z)	/* pack 3 regs */#define R2UPK1(x)	((((x)>>7)-1)&0177)		/* unpack reg 1 */#define R2UPK2(x)	((x)&0177)			/* unpack reg 2 */#define R2UPK3(x)	(x>>14)				/* unpack reg 3 */#define R2TEST(x)	((x)>=0200)			/* test if packed */#ifdef MULTILEVELunion	mltemplate {	struct ml_head {		int	tag;			/* tree class */		int	subtag;			/* subclass of tree */		union	mltemplate *nexthead;	/* linked by mlinit() */	} mlhead;	struct ml_node {		int	op;			/* operator or op description */		int	nshape;			/* node shape */		/*		 * Both op and nshape must match the node.		 * where the work is to be done entirely by		 * op, nshape can be SANY, visa versa, op can		 * be OPANY.		 */		int	ntype;			/* type descriptor */	} mlnode;};extern	union mltemplate mltree[];#endif#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?