亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? regalloc.c

?? <B>Digital的Unix操作系統VAX 4.2源碼</B>
?? C
?? 第 1 頁 / 共 3 頁
字號:
#ifndef lintstatic char	*sccsid = " @(#)regalloc.c	1.3	(ULTRIX)	1/15/86";#endif lint/************************************************************************ *									* *			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**	Sid Maxwell		29-Sep-88** 002	Modified alreg to write COMMON register values before an inner*	DO loop head.**	David Metsky		14-Jan-86** 001	Replaced old version with BSD 4.3 version as part of upgrade.**	Based on:	regalloc.c	5.1		6/7/85**************************************************************************//* * regalloc.c * * Register optimization routines for f77 compiler, pass 1 * * University of Utah CS Dept modification history: * * $History$ * $Log:	regalloc.c,v $ * Revision 2.9  85/03/18  21:35:05  donn * Bob Corbett's hack to prevent conflicts between subroutine side effects * and register assignment.  Makes the code a lot worse... *  * Revision 2.8  85/02/22  02:14:08  donn * In code like 'x = foo(x)', alreg() would copy the memory version of the * variable 'x' into the register version after the assignment, clobbering * the result.  A small change to regwrite() seems to prevent this. *  * Revision 2.7  85/02/16  03:32:45  donn * Fixed a bug where the loop test and increment were having register * substitution performed twice, once in the environment of the current * loop and once in the environment of the containing loop.  If the * containing loop puts (say) the inner loop's index variable in register * but the inner loop does not, havoc results. *  * Revision 2.6  85/02/14  23:21:45  donn * Don't permit variable references of the form 'a(i)' to be put in register * if array 'a' is in common.  This is because there is no good way to * identify instances of this sort without getting confused with other * variables in the same common block which are in register.  Sigh. *  * Revision 2.5  85/01/11  21:08:00  donn * Made changes so that we pay attention to SAVE statements.  Added a new * gensetreturn() function to implement this. *  * Revision 2.4  84/09/03  22:37:28  donn * Changed the treatment of SKRETURN in alreg() so that all variables in * register, not just COMMON variables, get written out to memory before a * RETURN.  This was causing the return value of a function to get lost when * a RETURN was done from inside a loop (among other problems). *  * Revision 2.3  84/08/04  20:52:42  donn * Added fixes for EXTERNAL parameters from Jerry Berkman. *  * Revision 2.2  84/08/04  20:34:29  donn * Fixed a stupidity pointed out by Jerry Berkman -- the 'floats in register' * stuff applies if the TARGET is a VAX, not if the local machine is a VAX. *  * Revision 2.1  84/07/19  12:04:47  donn * Changed comment headers for UofU. *  * Revision 1.5  83/11/27  19:25:41  donn * Added REAL to the list of types which may appear in registers (VAXen only). *  * Revision 1.4  83/11/13  02:38:39  donn * Bug fixed in alreg()'s handling of computed goto's.  A '<=' in place of a * '<' led to core dumps when we walked off the end of the list of labels... *  * Revision 1.3  83/11/12  01:25:57  donn * Bug in redundant register assignment code, mistakenly carried over some old * code that sometimes rewound a slot pointer even when a redundant slot wasn't * deleted; this caused an infinite loop...  Seems to work now. *  * Revision 1.2  83/11/09  14:58:12  donn * Took out broken code dealing with redundant register initializations. * Couldn't see what to do about redundantly initializing a DO variable but * I did fix things so that an assignment from a register into the same * register is always deleted. *  */#include "defs.h"#include "optim.h"#define LABTABSIZE 101#define VARTABSIZE 1009#define TABLELIMIT 12#if TARGET==VAX#define MSKREGTYPES M(TYLOGICAL) | M(TYADDR) | M(TYSHORT) | M(TYLONG) | M(TYREAL)#else#define MSKREGTYPES M(TYLOGICAL) | M(TYADDR) | M(TYSHORT) | M(TYLONG)#endif#define ISREGTYPE(x) ONEOF(x, MSKREGTYPES)#define MSKVARS M(STGAUTO) | M(STGBSS) | M(STGINIT) | M(STGCONST) |\		M(STGEQUIV) | M(STGARG) | M(STGCOMMON)#define ISVAR(x) ((((expptr) x)->headblock.vclass == CLVAR || \			((expptr) x)->headblock.vclass == CLUNKNOWN) \                  && ONEOF(((expptr) x)->headblock.vstg, MSKVARS))typedef  struct regdata    {      field vstg;      field vtype;      int memno;      int memoffset;      int refs;      Addrp stgp;      unsigned isarrayarg : 1;      unsigned istemp : 1;      unsigned isset : 1;      unsigned setfirst : 1;    } REGDATA;typedef  struct labelnode    {      struct labelnode *link;      int labelno;    } LABELNODE;typedef  struct varnode    {      struct varnode *link;      int memoffset;      unsigned isset : 1;      unsigned isused : 1;      unsigned setfirst : 1;      unsigned unusable : 1;      int refs;      Addrp stgp;    } VARNODE;typedef  struct addrnode    {      struct addrnode *link;      field vtype;      field vstg;      int memno;      unsigned istemp : 1;      unsigned isset : 1;      unsigned freeuse : 1;      unsigned mixedtype : 1;      unsigned fixed : 1;      int refs;      struct addrnode *commonlink;      VARNODE *varlist;    } ADDRNODE;typedef  struct setnode    {      struct setnode *link;      field vstg;      int memno;      int memoffset;    } SETNODE;typedef  struct doqueue    {      struct doqueue *up, *down;      Slotp dohead, doend;      int nregvars;      REGNODE *reg[MAXREGVAR];    }  DOQUEUE;LOCAL DOQUEUE *dqptr, *dqtop, *dqbottom;LOCAL Slotp dohead;LOCAL Slotp doend;LOCAL Slotp newcode;LOCAL LABELNODE *labeltable[LABTABSIZE];LOCAL ADDRNODE *vartable[VARTABSIZE];LOCAL ADDRNODE *commonvars;LOCAL SETNODE *setlist;LOCAL int topregvar;LOCAL int toplcv;LOCAL int allset;LOCAL ADDRNODE *currentaddr;LOCAL int loopcost;LOCAL REGDATA *regtab[MAXREGVAR];LOCAL REGDATA *rt[TABLELIMIT];LOCAL int tabletop;LOCAL int linearcode;LOCAL int globalbranch;LOCAL int commonunusable;LOCAL int regdefined[MAXREGVAR];LOCAL int memdefined[MAXREGVAR];LOCAL int regaltered[MAXREGVAR];LOCAL insertlabel(l)int l;{  int key;  LABELNODE *p;  key = l % LABTABSIZE;  for (p = labeltable[key]; p; p = p->link)    if (p->labelno == l) return;  p = labeltable[key];  labeltable[key] = ALLOC(labelnode);  labeltable[key]->link = p;  labeltable[key]->labelno = l;  return;}LOCAL int locallabel(l)int l;{  int key;  LABELNODE *p;  key = l % LABTABSIZE;  for (p = labeltable[key]; p; p = p->link)    if (p->labelno == l) return YES;  return NO;}LOCAL freelabtab(){  int i;  LABELNODE *p, *q;  for (i = 0; i < LABTABSIZE; i++)    if (labeltable[i])      {	p = labeltable[i];	labeltable[i] = NULL;	while (p)	  {	    q = p->link;	    free(p);	    p = q;	  }      }  return;}LOCAL ADDRNODE *getaddr(ap)Addrp ap;{  int key;  field vstg;  int memno;  register ADDRNODE *q;  ADDRNODE *q1;  if (!ISVAR(ap))    fatal("regalloc: bad data sent to getaddr");  vstg = ap->vstg;  memno = ap->memno;  key = (256*vstg + memno) % VARTABSIZE;  for (q = vartable[key]; q; q = q->link)    if ((q->vstg == vstg) && (q->memno == memno))       {	if (ap->istemp) q->istemp = YES;	if (ap->vtype != q->vtype)	  q->mixedtype = YES;	if (!fixedaddress(ap))	  q->fixed = NO;	return q;      }  q1 = vartable[key];  vartable[key] = q = ALLOC(addrnode);  q->link = q1;  q->vstg = vstg;  q->memno = memno;  if (ap->istemp) q->istemp = YES;  if (fixedaddress(ap)) q->fixed = YES;  q->vtype = ap->vtype;  q->varlist = NULL;  if (vstg == STGCOMMON)    {      q->commonlink = commonvars;      commonvars = q;    }  return q;}LOCAL VARNODE *getvar(ainfo, ap)ADDRNODE *ainfo;Addrp ap;{  register VARNODE *q;  VARNODE *q1;  int memoffset;  if (!ISVAR(ap))    fatal("regalloc:  bad data sent to getvar");  memoffset = ap->memoffset->constblock.const.ci;  for (q = ainfo->varlist; q; q = q->link)    if (q->memoffset == memoffset)      return q;  q1 = ainfo->varlist;  ainfo->varlist = q = ALLOC(varnode);  q->link = q1;  q->memoffset = memoffset;  q->stgp = (Addrp) cpexpr(ap);  return q;}LOCAL ADDRNODE *lookupaddr(vstg, memno)field vstg;int memno;{  int key;  register ADDRNODE *q;  key = (256*vstg + memno) % VARTABSIZE;  for (q = vartable[key]; q; q = q->link)    if ((q->vstg == vstg) && (q->memno == memno))      return q;  fatal("regalloc:  lookupaddr");}LOCAL VARNODE *lookupvar(ainfo, memoffset)ADDRNODE *ainfo;int memoffset;{  register VARNODE *q;  for (q = ainfo->varlist; q; q = q->link)    if (q->memoffset == memoffset)      return q;  fatal("regalloc:  lookupvar");}LOCAL int invartable(p)REGNODE *p;{  field vstg;  int memno;  int key;  register ADDRNODE *q;  vstg = p->vstg;  memno = p->memno;  key = (256*vstg + memno) % VARTABSIZE;  for (q = vartable[key]; q; q = q->link)    if ((q->vstg == vstg) && (q->memno == memno))      return YES;  return NO;}LOCAL freevartab(){  register ADDRNODE *p;  ADDRNODE *p1;  register VARNODE *q;  VARNODE *q1;  register int i;  for (i = 0; i < VARTABSIZE; i++)    if (vartable[i])      {	p = vartable[i];	vartable[i] = NULL;	while (p)	  {	    for (q = p->varlist; q; q = q1)	      {		q1 = q->link;		frexpr(q->stgp);		free ((char *) q);	      }	    p1 = p->link;	    free((char *) p);	    p = p1;	  }      }}LOCAL insertset(vstg, memno, memoffset)field vstg;int memno;int memoffset;{  register SETNODE *p;  SETNODE *q;  if (allset) return;  for (p = setlist; p; p = p->link)    if((p->vstg == vstg) && (p->memno == memno) && (p->memoffset == memoffset))      return;  q = p;  setlist = p = ALLOC(setnode);  p->link = q;  p->vstg = vstg;  p->memno = memno;  p->memoffset = memoffset;  return;}LOCAL int insetlist(vstg, memno, memoffset)field vstg;int memno;int memoffset;{  register SETNODE *p;  if (allset) return YES;  for (p = setlist; p; p = p->link)    if((p->vstg == vstg) && (p->memno == memno) && (p->memoffset == memoffset))      return YES;  return NO;}LOCAL clearsets(){  register SETNODE *p, *q;  allset = NO;  p = setlist;  while (p)    {      q = p->link;      free ((char *) p);      p = q;    }  setlist = NULL;  return;}LOCAL alreg(){  register Slotp sp;  register int i;  register ADDRNODE *p;  register VARNODE *q;  Slotp sp1, sp2;  ADDRNODE *addrinfo;  VARNODE *varinfo;  int docount;  struct Labelblock **lp;  int toptrack;  int track[MAXREGVAR];  Addrp ap, ap1;  DOQUEUE *dqp;  REGDATA *rp;  REGNODE *regp;  if (nregvar >= maxregvar) return;  commonvars = NULL;  for (sp = dohead; sp != doend->next; sp = sp->next)    switch (sp->type)      {      case SKLABEL:	insertlabel(sp->label);	break;      case SKARIF:      case SKASGOTO:      case SKCALL:      case SKCMGOTO:      case SKEQ:      case SKIFN:      case SKIOIFN:      case SKSTOP:      case SKPAUSE:      case SKRETURN:	scanvars(sp->expr);	break;      case SKNULL:      case SKGOTO:      case SKDOHEAD:      case SKENDDO:      case SKASSIGN:	break;      default:	badthing ("SKtype", "alreg-1", sp->type);      }  loopcost = 0;  docount = 1;  commonunusable = NO;  if (! dohead->nullslot) fatal ("missing dohead->nullslot -cbb");  for (sp = dohead->next, globalbranch = NO;       docount;       sp = sp->next, clearsets(), globalbranch = NO)    if (docount > 1)      switch (sp->type)	{	case SKDOHEAD:	  docount++;	  break;	case SKENDDO:	  docount--;	default:	  break;	}    else      switch (sp->type)	{	case SKARIF:#define LM   ((struct Labelblock * *)sp->ctlinfo)[0]->labelno #define LZ   ((struct Labelblock * *)sp->ctlinfo)[1]->labelno #define LP   ((struct Labelblock * *)sp->ctlinfo)[2]->labelno 	  if (!locallabel(LM) || !locallabel(LZ) || !locallabel(LP))	    {	      setall();	      globalbranch = YES;	    }	  countrefs(sp->expr);	  break;	case SKASGOTO:	  setall();	  globalbranch = YES;	  countrefs(sp->expr);	  break;	case SKCMGOTO:	  lp = (struct Labelblock **) sp->ctlinfo;	  for (i = 0; i < sp->label; i++, lp++)	    if (!locallabel((*lp)->labelno))	      {		setall();		globalbranch = YES;		break;	      }	  countrefs(sp->expr);	  break;	case SKDOHEAD:	  globalbranch = YES;	  loopcost = 2;	  docount++;	  break;	case SKENDDO:	  docount = 0;	  break;	case SKGOTO:	  if (!locallabel(sp->label))	    {	      setall();	      globalbranch = YES;	    }	  break;	case SKIFN:	case SKIOIFN:	  if (!locallabel(sp->label))	    {	      setall();	      globalbranch = YES;	    }	  countrefs(sp->expr);	  break;	case SKEQ:	case SKCALL:	case SKSTOP:	case SKPAUSE:	  linearcode = YES;	  countrefs(sp->expr);	  linearcode = NO;	  break;	}  topregvar = toplcv = nregvar - 1;  for (i = 0; i < nregvar; i++)    {      ap = memversion(regnamep[i]);      regtab[i] = rp = ALLOC(regdata);      rp->vstg = ap->vstg;      rp->vtype = ap->vtype;      rp->memno = ap->memno;      rp->memoffset = ap->memoffset->constblock.const.ci;      rp->isarrayarg = NO;      rp->stgp = ap;    }  for (i = 0; i < MAXREGVAR; i++)    track[i] = YES;  for (dqp = dqptr->down; dqp; dqp = dqp->down)    {      if (dqp->nregvars - 1 > topregvar)	topregvar = dqp->nregvars -1;      for (i = toplcv + 1; i < dqp->nregvars; i++)	if (track[i])	  if (regp = dqp->reg[i])	    if (rp = regtab[i])	      {		if (!samevar(rp, regp))		  track[i] = NO;	      }	    else if (invartable(regp))	      {		regtab[i] = rp = ALLOC(regdata);		rp->vstg = regp->vstg;		rp->vtype = regp->vtype;		rp->memno = regp->memno;		rp->memoffset = regp->memoffset;		addrinfo = lookupaddr(rp->vstg, rp->memno);		if (regp->isarrayarg)		  {		    rp->isarrayarg = YES;		    rp->refs = addrinfo->refs;		  }		else		  {		    varinfo = lookupvar(addrinfo, regp->memoffset);		    rp->refs = varinfo->refs;		    rp->stgp = (Addrp) cpexpr(varinfo->stgp);		    rp->istemp = addrinfo->istemp;		    rp->isset = varinfo->isset;		    rp->setfirst = varinfo->setfirst;		  }	      }	    else              track[i] = NO;	  else	    track[i] = NO;    }  toptrack = topregvar;  for (i = toplcv + 1; i <= topregvar; i++)    if (regtab[i])      if ((track[i] == NO) || (regtab[i]->refs <= 0))        {	  free((char *) regtab[i]);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清dvd| 日韩一二三区视频| 久久草av在线| 亚洲欧美偷拍另类a∨色屁股| 欧美二区三区的天堂| 成人18精品视频| 精品一区二区三区久久| 一区二区成人在线观看| 久久久不卡网国产精品二区| 欧美日韩aaa| 99久久99精品久久久久久| 久久精品国产久精国产爱| 一区二区三区免费看视频| 欧美激情综合网| 日韩精品一区二区三区视频| 欧美日韩免费观看一区二区三区 | 午夜国产精品一区| 国产精品毛片a∨一区二区三区| 日韩精品中文字幕在线不卡尤物 | 免费日本视频一区| 一个色在线综合| 中文字幕一区二区三区乱码在线| 久久奇米777| 欧美成人bangbros| 日韩一级免费一区| 91精品黄色片免费大全| 欧美日韩成人在线一区| 欧美自拍偷拍午夜视频| 一本一道久久a久久精品 | 国产精品性做久久久久久| 蜜桃视频一区二区三区在线观看| 亚洲一级电影视频| 豆国产96在线|亚洲| 久久99久久久久| 美国三级日本三级久久99| 午夜精品福利一区二区三区av| 亚洲最新视频在线观看| 亚洲一区二区在线免费观看视频| 亚洲手机成人高清视频| 亚洲欧美激情一区二区| 亚洲人成网站在线| 一个色在线综合| 亚洲综合视频网| 亚洲第一电影网| 日韩成人午夜精品| 日韩av在线免费观看不卡| 蜜桃视频一区二区三区在线观看 | 91丨porny丨最新| 99re这里都是精品| 91福利视频久久久久| 在线观看www91| 欧美日韩dvd在线观看| 欧美一卡2卡三卡4卡5免费| 欧美一区二区三区不卡| 精品日韩av一区二区| 国产日韩欧美精品一区| 国产日韩欧美不卡在线| 国产精品污污网站在线观看| 亚洲女与黑人做爰| 亚洲成人综合视频| 麻豆精品一区二区三区| 国产激情视频一区二区在线观看 | 91蜜桃免费观看视频| 一本久道久久综合中文字幕| 欧美又粗又大又爽| 91麻豆精品国产91久久久使用方法| 日韩欧美一级片| 国产精品久久久久久久浪潮网站 | 狠狠色丁香九九婷婷综合五月| 韩国欧美一区二区| 成人av资源网站| 欧美日韩免费一区二区三区 | 国产一区二区三区在线观看免费| 国产91精品一区二区麻豆网站| 99久久精品免费看| 91精品国产综合久久久久久| 久久久五月婷婷| 一区二区三区四区激情| 老汉av免费一区二区三区| 成人夜色视频网站在线观看| 欧美四级电影网| 国产网红主播福利一区二区| 一区二区三国产精华液| 国产一区中文字幕| 欧美色中文字幕| 久久精品亚洲精品国产欧美| 亚洲一区二区三区四区不卡| 国产一区二三区好的| 在线观看不卡一区| 久久久电影一区二区三区| 亚洲一区二区三区四区的| 国产综合久久久久久鬼色 | 色综合中文综合网| 欧美一区二区在线观看| 国产精品人人做人人爽人人添| 91麻豆精品在线观看| 欧美精品丝袜久久久中文字幕| 中文一区二区在线观看| 奇米色一区二区| 91蜜桃网址入口| 国产亚洲制服色| 日韩电影免费在线观看网站| 99久久国产综合色|国产精品| 日韩欧美另类在线| 亚洲成人免费观看| 99re这里都是精品| 久久影院午夜论| 日韩精品免费专区| 色激情天天射综合网| 日本一区二区三区四区在线视频 | 九九视频精品免费| 欧美男女性生活在线直播观看| 国产精品久久久久久久久晋中 | 欧美一级高清大全免费观看| 亚洲精品成人少妇| www.亚洲免费av| 久久久国产午夜精品| 看片的网站亚洲| 欧美色综合网站| 亚洲人成精品久久久久久| 国产**成人网毛片九色| 欧美xxxxxxxx| 日本vs亚洲vs韩国一区三区| 欧美色区777第一页| 亚洲欧美日韩一区二区三区在线观看| 国产麻豆精品视频| 2017欧美狠狠色| 紧缚奴在线一区二区三区| 欧美一区二区性放荡片| 爽好多水快深点欧美视频| 日本道在线观看一区二区| **网站欧美大片在线观看| 不卡影院免费观看| 国产精品色在线| 成人精品小蝌蚪| 中文成人av在线| 成人午夜碰碰视频| 国产精品免费看片| 波多野结衣在线aⅴ中文字幕不卡| 国产拍欧美日韩视频二区| 国产精品一区二区久久精品爱涩| 26uuu另类欧美亚洲曰本| 国产乱码精品1区2区3区| 国产日产欧美一区| www.色综合.com| 亚洲裸体xxx| 欧美色电影在线| 日本不卡的三区四区五区| 欧美不卡一区二区三区| 韩国女主播一区| 欧美国产一区在线| 91丨九色丨蝌蚪丨老版| 亚洲综合一区二区精品导航| 欧美人体做爰大胆视频| 免费成人美女在线观看| 久久午夜国产精品| bt欧美亚洲午夜电影天堂| 亚洲精品综合在线| 欧美日韩激情一区| 美女视频第一区二区三区免费观看网站| 日韩精品一区二区三区在线观看 | 久久久午夜电影| 暴力调教一区二区三区| 亚洲香肠在线观看| 欧美一区二区三区四区久久| 国产一区二区三区久久久| 国产精品国产三级国产有无不卡 | 91麻豆福利精品推荐| 亚洲高清在线视频| 欧美v国产在线一区二区三区| 国产精品一区二区久久不卡| 亚洲欧美国产77777| 91精品国产综合久久久久久| 国产成人av电影| 亚洲国产精品久久人人爱蜜臀| 这里只有精品电影| 成人黄色小视频| 日韩精品成人一区二区在线| 欧美日韩一区二区三区在线看| 久久不见久久见中文字幕免费| 中文字幕在线观看不卡| 777午夜精品免费视频| 成人看片黄a免费看在线| 亚洲一区在线看| 久久久影视传媒| 欧美日韩亚洲综合在线| 高清视频一区二区| 日本sm残虐另类| 国产精品久久久久四虎| 欧美岛国在线观看| 色播五月激情综合网| 极品少妇xxxx精品少妇| 亚洲午夜一区二区三区| 国产日产欧产精品推荐色 | 国产一区二区三区精品视频| 亚洲最大成人网4388xx| 日本一区二区免费在线| 欧美精品黑人性xxxx| www.66久久| 国产精品亚洲成人|