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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? an68.c

?? 本程序集是Allen I. Holub所寫的《Compiler Design in C》一書的附隨軟件
?? C
字號:
/*
 * 68K/386 32-bit C compiler.
 *
 * copyright (c) 1997, David Lindauer
 * 
 * This compiler is intended for educational use.  It may not be used
 * for profit without the express written consent of the author.
 *
 * It may be freely redistributed, as long as this notice remains intact
 * and either the original sources or derived sources 
 * are distributed along with any executables derived from the originals.
 *
 * The author is not responsible for any damages that may arise from use
 * of this software, either idirect or consequential.
 *
 * v1.35 March 1997
 * David Lindauer, gclind01@starbase.spd.louisville.edu
 *
 * Credits to Mathew Brandt for original K&R C compiler
 *
 */
#include        <stdio.h>
#include        "expr.h"
#include        "c.h"
#include        "gen68.h"
#include 				"diag.h"

/* pc-relative expressions not optimized */
extern int linkreg,basereg;
extern AMODE    push[], pop[];
extern OCODE    *peep_tail;
extern SYM *currentfunc;
extern int prm_stackcheck,prm_phiform,prm_linkreg,prm_rel, prm_smalldata;
extern int floatregs,dataregs,addrregs;
extern long framedepth,stackdepth;
extern int cf_maxfloat, cf_maxaddress,cf_maxdata;
extern int cf_freedata,cf_freeaddress;
extern CSE       *olist;         /* list of optimizable expressions */
long lc_maxauto;

int save_mask, fsave_mask;
void reserveregs(int *datareg, int *addreg, int *floatreg)
/*
 * Reserve regs goes through and reserves a register for variables with
 * the REGISTER keyword.  Note that it currently does register allocation
 * backwards...
 */
{
	CSE *csp = olist;

	while (csp) {
		switch (csp->exp->nodetype) {
								case en_floatref:
								case en_doubleref:
								case en_longdoubleref:
                case en_b_ref:
                case en_w_ref:
                case en_l_ref:
                case en_ub_ref:
                case en_uw_ref:
								case en_ul_ref:
										if (csp->exp->v.p[0]->nodetype != en_autoreg)		
											break;
								  		if (csp->exp->nodetype == en_floatref || csp->exp->nodetype == en_doubleref 
												|| csp->exp->nodetype == en_longdoubleref) {
												if (*floatreg <cf_maxfloat && floatregs)
													csp->reg = (*floatreg)++;
											}
			                else if( (*datareg < cf_maxdata) && (csp->duses <= csp->uses/4) && dataregs)
                        csp->reg = (*datareg)++;
            			    else if(!(csp->size == 1 || csp->size == -1) && (*addreg < cf_maxaddress) &&addrregs)
                        csp->reg = (*addreg)++;
											if (csp->reg != -1) {
												((SYM *)csp->exp->v.p[0]->v.p[0])->inreg = TRUE;
												((SYM *)csp->exp->v.p[0]->v.p[0])->value.i = -csp->reg;
											}
											break;
		}
		csp = csp->next;
	}
}	

void allocate(int datareg, int addreg, int floatreg, SNODE *block )
/*
 *      allocate will allocate registers for the expressions that have
 *      a high enough desirability.
 */
{       CSE      *csp;
        ENODE    *exptr;
        unsigned      mask, rmask,i,fmask,frmask,size;
        AMODE    *ap, *ap2;
				framedepth = 4+lc_maxauto;
        mask = 0;
				rmask = 0;
				fmask = frmask = 0;
				for (i=cf_freedata; i < datareg; i++) {
						framedepth+=4;
						rmask = rmask | (1 << (15 - i));
                        mask = mask | (1 << i);
				}
				for (i=cf_freeaddress+16; i < addreg; i++) {
						framedepth+=4;
						rmask = rmask | (1 << (23 - i));
                        mask = mask | (1 << (i-8));
				}
        while( bsort(&olist) );         /* sort the expression list */
        csp = olist;
        while( csp != 0 ) {
						if (csp->reg == -1 && !(csp->exp->cflags & DF_VOL) && !csp->voidf) {
                if( desire(csp) < 3 )
                        csp->reg = -1;
								else {
									if (csp->exp->nodetype == en_rcon || csp->exp->nodetype == en_fcon || csp->exp->nodetype == en_lrcon
								  			|| csp->exp->nodetype == en_floatref || csp->exp->nodetype ==en_doubleref
												|| csp->exp->nodetype == en_longdoubleref) {
										if (floatreg <24 && floatregs)
											csp->reg = floatreg++;
									}
			            else if( (datareg < cf_maxdata) && (csp->duses <= csp->uses/4) && dataregs)
                    csp->reg = (datareg)++;
      	      		else if( !(csp->size == 1 || csp->size == -1) && (addreg < cf_maxaddress) &&addrregs)
        	          csp->reg = (addreg)++;
								}
						}
            if( csp->reg != -1 )
				{
						if (lvalue(csp->exp) && !((SYM *)csp->exp->v.p[0]->v.p[0])->funcparm) {
							((SYM *)csp->exp->v.p[0]->v.p[0])->inreg = TRUE;
							((SYM *)csp->exp->v.p[0]->v.p[0])->value.i = -csp->reg;
						}
						if (csp->reg < 16) {
							framedepth+=4;
							rmask = rmask | (1 << (15 - csp->reg));
                        mask = mask | (1 << csp->reg);
						}
						else if (csp->reg < 32) {
							framedepth+=4;
							rmask = rmask | (1 << (23 - csp->reg));
                        mask = mask | (1 << (csp->reg-8));
						}
						else {
							framedepth+=12;
							frmask = frmask | (1 << (39 - csp->reg));
              fmask = fmask | (1 << (csp->reg-32));
						}
				}
                csp = csp->next;
                }
				allocstack();								/* Allocate stack space for the local vars */
				if (currentfunc->tp->lst.head !=0 && currentfunc->tp->lst.head != (SYM *)-1) {
					if (prm_phiform || currentfunc->intflag) {
						mask |= (1 << (linkreg +8));
						rmask |= (1 << (15 - linkreg -8));
						framedepth+=4;
					}
					if (currentfunc->intflag) {
						mask |= 0xffff;
						rmask |= 0xffff;
						framedepth = lc_maxauto;
					}
				}
				if (prm_linkreg && !currentfunc->intflag && (currentfunc->tp->lst.head && currentfunc->tp->lst.head != (SYM *)-1 || lc_maxauto)) {
					gen_code(op_link,0,makeareg(linkreg),make_immed(-lc_maxauto));
				}				
			  if( mask != 0 ) 
              gen_code(op_movem,4,make_mask(rmask,0,0),push);
        save_mask = mask;
				if (fmask!=0)
                gen_code(op_fmovem,10,make_mask(frmask,0,1),push);
				fsave_mask = fmask;
				if ((prm_phiform || currentfunc->intflag) && currentfunc->tp->lst.head && currentfunc->tp->lst.head != (SYM *) -1) {
					gen_code(op_move,4,makeareg(0), makeareg(linkreg));
				}
				if ((!prm_linkreg || currentfunc->intflag) && lc_maxauto) {
					AMODE *ap = xalloc(sizeof(AMODE)); 
					ap->mode = am_indx;
					ap->offset = makenode(en_icon,(char *)-lc_maxauto,0);
					ap->preg = 7;
          gen_code(op_lea,0,ap,makeareg(7));
				}
				
				if (prm_stackcheck) {
					AMODE *ap1;
					ap = set_symbol("_stackerror",1);
					ap1 = set_symbol("_stackbottom",0);
					if (prm_rel) {
						ap1->mode = am_indx;
						ap1->preg = basereg;
					}
					else {
						ap1->mode = am_adirect;
						if (prm_smalldata)
							ap1->preg = 2;
						else
							ap1->preg = 4;
					}
					gen_code(op_cmp,4,ap1,makeareg(7));
					gen_code(op_bhi,0,ap,0);
				}
}
void loadregs(void)
/*
 * Initailze allocated regs
 *
 */
{       CSE      *csp;
        ENODE    *exptr;
        unsigned      mask, rmask,i,fmask,frmask,size;
        AMODE    *ap, *ap2;
        csp = olist;
        while( csp != 0 ) {
								int sz;
                if( csp->reg != -1 )
                        {               /* see if preload needed */
                        exptr = csp->exp;
                        if( !lvalue(exptr) || ((SYM *)exptr->v.p[0]->v.p[0])->funcparm )
                                {
																exptr = csp->exp;
                                initstack();
																sz = csp->size;
                                ap = gen_expr(exptr,F_ALL,sz);
							                  if (sz == 0 && ap->mode == am_immed)
																	sz = 4;
                                if( csp->reg < 16 ) {
							                  	if (sz == 0 && ap->mode == am_immed)
																		sz = 4;
																	if (ap->mode == am_dreg)
																		peep_tail->oper2->preg = csp->reg;
																	else {
                                        ap2 = makedreg(csp->reg);
                                				gen_code(op_move,sz,ap,ap2);
																				do_extend(ap2,sz,4,F_DREG);
																	}
																}
                                else
																	if (csp->reg < 32) {
							                  		if (sz == 0 && ap->mode == am_immed)
																			sz = 4;
																		if (ap->mode == am_areg)
																			peep_tail->oper2->preg = csp->reg - 16;
																		else {
  	                                      ap2 = makeareg(csp->reg - 16);
    	                            				gen_code(op_move,4,ap,ap2);
																		}
																	}
																	else {
									                  if (sz == 0 && ap->mode == am_immed)
																			sz = 8;
																		if (ap->mode == am_freg)
																			peep_tail->oper2->preg = csp->reg - 32;
																		else {
  	                                      ap2 = makefreg(csp->reg - 32);
																					size = 8;
																					if (exptr->nodetype == en_floatref)
																						size = 6;
    	                            				gen_code(op_fmove,size,ap,ap2);
																		}
																	}
                                freeop(ap);
																if (lvalue(exptr) && ((SYM *)exptr->v.p[0]->v.p[0])->funcparm) {
																	((SYM *)exptr->v.p[0]->v.p[0])->inreg = TRUE;
																	((SYM *)exptr->v.p[0]->v.p[0])->value.i = -csp->reg;
																}
                                }
                        }
                csp = csp->next;
                }
}
void voidfloat(SNODE *block)
{
}
void asm_scan(OCODE *cd)
{
}
void asm_repcse(OCODE *cd)
{
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本欧美加勒比视频| 777xxx欧美| 成人av在线播放网址| 国产精品正在播放| 国产精品亚洲成人| 成人性生交大片免费看视频在线| 激情亚洲综合在线| 精品一区二区三区欧美| 国产原创一区二区| 国产美女主播视频一区| 国产精品小仙女| 成人动漫中文字幕| av在线不卡观看免费观看| av中文字幕在线不卡| 色成人在线视频| 欧美高清视频一二三区| 日韩三级精品电影久久久 | 26uuu精品一区二区三区四区在线| 欧美一区二区三区影视| 欧美成人性福生活免费看| 欧美va亚洲va| 欧美激情一区二区三区四区| 国产三级精品三级在线专区| 亚洲欧美色一区| 亚洲国产婷婷综合在线精品| 日韩电影在线一区| 国产精品一区在线观看乱码| 99久久99久久久精品齐齐| 91视视频在线直接观看在线看网页在线看 | 亚洲欧美日韩一区二区| 午夜精品免费在线| 精品一二三四在线| 99r国产精品| 91.成人天堂一区| 久久久久久毛片| 麻豆成人91精品二区三区| 国产成人精品免费看| 色狠狠色噜噜噜综合网| 欧美成人一区二区三区片免费| 国产日韩欧美一区二区三区综合| 亚洲免费在线电影| 美女视频黄频大全不卡视频在线播放| 国产精品一区二区三区99| 日本韩国精品在线| 精品三级在线看| 亚洲视频你懂的| 久久精品国产久精国产| 91亚洲精品一区二区乱码| 欧美一区二区三区精品| 亚洲国产精品黑人久久久| 亚洲成av人片在线| 成人午夜短视频| 在线播放欧美女士性生活| 国产欧美1区2区3区| 天使萌一区二区三区免费观看| 国产成人免费视频一区| 欧美久久久一区| 亚洲欧美偷拍卡通变态| 麻豆极品一区二区三区| 91成人国产精品| 日本一区二区视频在线观看| 午夜精品久久一牛影视| 99精品国产热久久91蜜凸| 精品三级在线看| 亚洲国产一区二区a毛片| 成人av电影在线| 日韩一区二区三| 亚洲永久精品大片| 成人美女在线观看| 精品国产乱码久久久久久图片| 亚洲一区二区三区三| 成人黄动漫网站免费app| 日韩精品一区二区三区在线| 亚洲第一搞黄网站| 91丨九色丨尤物| 国产精品网友自拍| 国产在线麻豆精品观看| 日韩一区二区视频| 亚洲成人激情av| 欧美在线一二三| 一区二区在线电影| 99久久精品国产一区| 国产欧美精品一区二区色综合朱莉| 免费人成在线不卡| 欧美日韩精品一区二区天天拍小说 | 日韩欧美亚洲另类制服综合在线| 亚洲妇熟xx妇色黄| 欧美在线|欧美| 亚洲精品一二三| 91网站最新网址| 亚洲欧美国产高清| 91丨porny丨首页| 亚洲人被黑人高潮完整版| 成人av中文字幕| 国产精品欧美久久久久一区二区| 国产米奇在线777精品观看| 欧美精品一区二区三| 日本va欧美va瓶| 91精品国产高清一区二区三区| 三级亚洲高清视频| 中文字幕亚洲综合久久菠萝蜜| 成人精品小蝌蚪| 日韩一区在线看| 91国偷自产一区二区开放时间| 最新中文字幕一区二区三区| 99久久99久久免费精品蜜臀| 日韩码欧中文字| 色婷婷久久久亚洲一区二区三区| 一区二区三区免费在线观看| 在线精品视频免费观看| 亚洲自拍偷拍av| 欧美精品乱人伦久久久久久| 肉色丝袜一区二区| 亚洲精品在线一区二区| 国产成人免费视频网站| 中文久久乱码一区二区| 91丝袜国产在线播放| 亚洲午夜久久久久中文字幕久| 欧美精品丝袜中出| 蓝色福利精品导航| 国产无一区二区| 色狠狠色狠狠综合| 日本一区中文字幕| 久久久久久久久97黄色工厂| 成人av在线播放网址| 亚洲综合色噜噜狠狠| 在线91免费看| 国产高清成人在线| 亚洲另类在线制服丝袜| 欧美日韩一卡二卡三卡 | 欧美日韩一区二区在线视频| 日本视频一区二区| 国产日韩欧美综合在线| 色婷婷亚洲精品| 久久se这里有精品| 国产精品夫妻自拍| 欧美日韩精品福利| 国产一二精品视频| 亚洲精品国产成人久久av盗摄| 欧美一区二视频| 成人午夜免费av| 日韩精品福利网| 国产精品人人做人人爽人人添| 欧美无乱码久久久免费午夜一区| 久久精品国产亚洲高清剧情介绍| 国产三级欧美三级日产三级99| 欧美中文字幕一区二区三区亚洲| 韩国av一区二区三区四区| 亚洲人吸女人奶水| 日韩欧美国产系列| 色屁屁一区二区| 国产一区二区免费视频| 亚洲免费资源在线播放| 午夜私人影院久久久久| 久久久久久久久蜜桃| 色综合色综合色综合| 极品少妇一区二区三区精品视频| 亚洲欧美色图小说| 欧美大胆人体bbbb| 91美女片黄在线| 国产精品一区三区| 视频一区欧美精品| 亚洲欧美一区二区三区极速播放| 日韩三级视频在线看| 在线视频国产一区| 国产成人福利片| 麻豆精品久久久| 亚洲一区欧美一区| 国产精品蜜臀在线观看| 精品国产一区二区三区久久影院 | 中文字幕一区二区不卡| 精品女同一区二区| 欧美浪妇xxxx高跟鞋交| 不卡视频一二三四| 国产精品综合网| 青娱乐精品视频在线| 一区二区三区在线播| 国产欧美精品一区aⅴ影院| 日韩欧美国产麻豆| 欧美军同video69gay| 日本福利一区二区| 成人精品在线视频观看| 国产原创一区二区| 久久国产婷婷国产香蕉| 日精品一区二区三区| 一区二区三区视频在线观看| 中文字幕一区二区三区av| 国产亚洲欧美一级| 久久久亚洲欧洲日产国码αv| 欧美精品在线一区二区三区| 91电影在线观看| 91久久香蕉国产日韩欧美9色| 成人一级片在线观看| 国产高清成人在线| 国产大片一区二区| 国产精品主播直播| 国产麻豆成人精品| 国产精品456| 国产suv精品一区二区6| 国产精品99久久久久久久vr|