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 + -
显示快捷键?