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

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

?? an68.c

?? 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)
{
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美久久一区二区| 午夜精彩视频在线观看不卡| 成人免费在线播放视频| 日韩和欧美一区二区| 成人美女视频在线看| 91麻豆精品国产自产在线| 亚洲女同女同女同女同女同69| 精品一区二区在线免费观看| 欧美日韩精品综合在线| 自拍偷拍亚洲激情| 高清不卡一区二区在线| 久久久久久久久久久电影| 男人的天堂久久精品| 欧美日韩国产精品自在自线| 国产精品五月天| 国产精品亚洲一区二区三区妖精 | 国产亚洲1区2区3区| 亚洲18女电影在线观看| 日本韩国欧美三级| 中文字幕亚洲欧美在线不卡| 国产精品一级片在线观看| 日韩欧美在线不卡| 日韩激情视频在线观看| 欧美精品视频www在线观看 | 欧美性生活久久| 国产精品高清亚洲| va亚洲va日韩不卡在线观看| 国产精品视频一二三| 成人激情校园春色| 国产精品久久久久永久免费观看 | 色菇凉天天综合网| 亚洲综合丁香婷婷六月香| 91麻豆精东视频| 亚洲麻豆国产自偷在线| 91官网在线免费观看| 亚洲综合精品自拍| 宅男噜噜噜66一区二区66| 麻豆专区一区二区三区四区五区| 日韩美女一区二区三区四区| 蜜桃视频一区二区| 久久新电视剧免费观看| 国产凹凸在线观看一区二区| 国产精品私人自拍| 91极品视觉盛宴| 五月天激情综合| 精品国产乱码久久久久久闺蜜| 精品无人码麻豆乱码1区2区| 久久蜜桃一区二区| 99精品欧美一区二区三区综合在线| 综合精品久久久| 欧美精品一二三| 国产成人在线视频网站| 亚洲品质自拍视频| 欧美一级在线免费| 国产成人av电影在线播放| 亚洲激情自拍偷拍| 日韩一区二区不卡| 成人a免费在线看| 亚洲r级在线视频| 精品国产一区二区精华| 北条麻妃一区二区三区| 五月天激情综合网| 国产网站一区二区三区| 欧美日韩一卡二卡三卡| 国产精品影视天天线| 亚洲一区精品在线| 久久夜色精品国产欧美乱极品| 99精品久久只有精品| 奇米色777欧美一区二区| 国产欧美精品一区| 91麻豆精品国产自产在线观看一区 | 国产激情视频一区二区在线观看 | 91成人免费网站| 国产主播一区二区三区| 亚洲激情图片一区| 久久精品一区二区三区不卡 | 91国在线观看| 国产呦萝稀缺另类资源| 亚洲成av人综合在线观看| 中文字幕乱码久久午夜不卡| 欧美另类videos死尸| 99在线精品免费| 国内精品嫩模私拍在线| 亚洲动漫第一页| 中文字幕一区不卡| 久久伊人蜜桃av一区二区| 欧美精品xxxxbbbb| 99国产精品久久久| 国产福利一区二区三区| 美脚の诱脚舐め脚责91| 亚洲成人你懂的| 一区二区在线观看av| 国产欧美一区二区在线| 精品第一国产综合精品aⅴ| 91精品蜜臀在线一区尤物| 97精品久久久午夜一区二区三区| 国产精品综合一区二区三区| 麻豆国产精品777777在线| 日韩中文字幕麻豆| 亚洲成人动漫av| 亚洲一区在线电影| 亚洲欧美色一区| 亚洲日本韩国一区| 一区视频在线播放| 国产精品毛片高清在线完整版| 精品伦理精品一区| wwww国产精品欧美| 精品三级av在线| 精品久久国产老人久久综合| 日韩视频在线一区二区| 欧美一二三四在线| 精品国精品国产尤物美女| 日韩美女一区二区三区四区| 日韩欧美第一区| 精品久久久久久久久久久久久久久 | 欧美性猛片xxxx免费看久爱| 在线区一区二视频| 欧美日韩在线观看一区二区 | 99re在线视频这里只有精品| www.欧美日韩| 一本大道久久a久久精二百| 91麻豆自制传媒国产之光| 在线亚洲免费视频| 欧美视频中文字幕| 日韩一区二区三区在线观看| 日韩视频在线你懂得| 久久久久国产精品免费免费搜索| 久久久久久久性| 国产精品久久久久久久久久久免费看 | 日韩成人av影视| 久久精品国产精品亚洲精品| 国产精品一卡二卡| 色综合久久66| 91麻豆精品国产91久久久资源速度 | 精品一区二区三区在线视频| 国产又黄又大久久| 99vv1com这只有精品| 欧美日韩国产另类不卡| 精品剧情v国产在线观看在线| 国产视频在线观看一区二区三区 | 日韩国产欧美视频| 国产美女视频91| 色综合久久88色综合天天免费| 5566中文字幕一区二区电影| 久久久美女毛片| 亚洲一区二区欧美激情| 激情久久久久久久久久久久久久久久| 东方欧美亚洲色图在线| 欧美在线制服丝袜| 久久久一区二区三区| 亚洲码国产岛国毛片在线| 美腿丝袜一区二区三区| 91网站黄www| 日韩欧美成人一区二区| 亚洲免费三区一区二区| 国产一区欧美二区| 色爱区综合激月婷婷| www国产成人| 亚洲成a人v欧美综合天堂| 成人影视亚洲图片在线| 欧美日本韩国一区二区三区视频| 欧美精品一区二区三区很污很色的 | 久久精品男人天堂av| 五月激情六月综合| 91在线观看美女| 2019国产精品| 日韩电影在线一区二区三区| 91丨porny丨蝌蚪视频| 精品国产1区二区| 亚洲成av人片一区二区三区| 国产成人av一区二区三区在线 | 免费看日韩a级影片| 色呦呦网站一区| 久久久久国产免费免费| 日韩中文字幕亚洲一区二区va在线 | 日韩欧美国产精品| 午夜国产不卡在线观看视频| 不卡一区中文字幕| 欧美国产成人在线| 久久99久久99| 日韩三级电影网址| 日日摸夜夜添夜夜添精品视频 | 久久久精品国产免费观看同学| 亚洲成精国产精品女| 色八戒一区二区三区| 国产精品国产三级国产aⅴ原创| 国产主播一区二区| 欧美精品一区二区三区高清aⅴ| 日本不卡不码高清免费观看| 欧美伦理影视网| 亚洲电影视频在线| 欧美情侣在线播放| 香蕉久久一区二区不卡无毒影院 | 亚洲va韩国va欧美va精品| 在线看国产一区二区| 亚洲精选视频免费看| 91九色最新地址| 亚洲电影视频在线| 91麻豆精品国产91久久久| 天堂精品中文字幕在线|