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

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

?? gexpr386.c

?? C語言編譯器的源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
								case en_cul:
								case en_cp:
                        ssize = 4;
                        break;
                case en_tempref:
                case en_regref:
												ssize = node->v.p[0]->v.i >> 8;
												break;
								case en_floatref:
								case en_cf:
												ssize = 6;
												break;
								case en_doubleref:
								case en_cd:
												ssize = 8;
												break;
								case en_longdoubleref:
								case en_cld:
												ssize = 10;
												break;
								default:
												ssize = -4;
                }
        if (chksize( ssize , rsize ))
                rsize = ssize;
        ap2 = gen_expr(node->v.p[1],F_DREG | F_FREG,rsize);
				mark();
        ap1 = gen_expr(node->v.p[0],F_ALL | F_NOBIT | F_DEST,ssize);
				ap4 = xalloc(sizeof(AMODE));
				ap4->preg = ap1->preg;
				ap4->mode = am_indisp;
				ap4->offset = makenode(en_icon,0,0);
				if (!equal_address(ap1,ap2)	)
					if (rsize > 4) {
						floatstore(ap4,ssize,flags);
						gen_codef(op_fwait,0,0,0);
					}
					else
						if (node->v.p[0]->nodetype == en_bits)
							bit_move(ap4,ap2,node->v.p[0],flags,ssize,rsize);
						else
							if (ap2->mode != am_dreg && ap2->mode != am_immed
										&& ap4->mode != am_dreg) {
								ap3 = temp_data();
  	  	    		gen_code(op_mov,rsize,ap3,ap2);
    	  	  		gen_code(op_mov,ssize,ap4,ap3);
								freeop(ap3);
							}
							else
  	      			gen_code(op_mov,ssize,ap4,ap2);
        freeop(ap1);
				do_extend(ap2,ssize,size,flags);
				make_legal(ap2,flags,size);
        return ap2;
}

AMODE    *gen_aincdec(ENODE *node, int flags, int size, int op)
/*
 *      generate an auto increment or decrement node. op should be
 *      either op_add (for increment) or op_sub (for decrement).
 */
{       AMODE    *ap1,*ap2;
        int             ssize,rsize;
        ssize = natural_size(node->v.p[0]);
				if (!(flags & F_NOVALUE)) {
					ap2 = temp_data();
				}
				mark();
        ap1 = gen_expr(node->v.p[0],F_ALL,ssize);
				if (!(flags &F_NOVALUE)) {
					gen_code(op_mov,ssize,ap2,ap1);
				}
        gen_code(op,ssize,ap1,make_immed((int)node->v.p[1]));
				freeop(ap1);
				release();
				if (!(flags & F_NOVALUE)) {
					do_extend(ap2,ssize,size,flags);
					make_legal(ap2,flags,size);
				}
        return ap2;
}

int push_param(ENODE *ep, int size)
/*
 *      push the operand expression onto the stack.
 */
{       AMODE    *ap, *ap2;
				int rv,sz;
				switch (ep->nodetype) {
								case en_absacon:
												ep->v.i = (( SYM *)ep->v.p[0])->value.i;
                        ap = xalloc(sizeof(AMODE));
                        ap->mode = am_immed;
                        ap->offset = ep;     /* use as constant node */
                        gen_code(op_push,4,ap,0);
												rv = 4;
												break;
                case en_napccon:
                case en_nacon:
												ep->v.p[0] = ((SYM *)ep->v.p[0])->name;
                case en_labcon:
                case en_nalabcon:
                        ap = xalloc(sizeof(AMODE));
                        ap->mode = am_immed;
                        ap->offset = ep;     /* use as constant node */
                        gen_code(op_push,4,ap,0);
                        make_legal(ap,F_ALL,4);
												rv = 4;
												break;
								case en_cf:
								case en_floatref:
												ap = gen_expr(ep,F_FREG | F_VOL,6);
												gen_code(op_sub,4,makedreg(ESP),make_immed(4));
												ap2 = make_immed(0);
												ap2->preg = ESP;
												ap2->mode = am_indisp;
												gen_codef(op_fstp,6,ap2,0);
												gen_codef(op_fwait,0,0,0);
												rv = 4;
												break;
								case en_cd:
								case en_doubleref:
												ap = gen_expr(ep,F_FREG | F_VOL,8);
												gen_code(op_sub,4,makedreg(ESP),make_immed(8));
												ap2 = make_immed(0);
												ap2->preg = ESP;
												ap2->mode = am_indisp;
												gen_codef(op_fstp,8,ap2,0);
												gen_codef(op_fwait,0,0,0);
												rv = 8;
												break;
								case en_cld:
								case en_longdoubleref:
												ap = gen_expr(ep,F_FREG | F_VOL,8);
												gen_code(op_sub,4,makedreg(ESP),make_immed(10));
												ap2 = make_immed(0);
												ap2->preg = ESP;
												ap2->mode = am_indisp;
												gen_codef(op_fstp,10,ap2,0);
												gen_codef(op_fwait,0,0,0);
												rv = 8;
												break;
								case en_rcon: 
								case en_fcon:
								case en_lrcon:
												rv = size;
												if (rv == 6) rv= 4;
												if (rv == 10) rv= 12;
												ap = gen_expr(ep,F_FREG | F_VOL,size);
												make_floatconst(ap,size);
												gen_code(op_sub,4,makedreg(ESP),make_immed(rv));
												ap2 = make_immed(0);
												ap2->preg = ESP;
												ap2->mode = am_indisp;
												gen_codef(op_fstp,rv,ap2,0);
												gen_codef(op_fwait,0,0,0);
												break;
								default:
												rv = 4;
      			  					ap = gen_expr(ep,F_ALL,4);
												if (ap->mode != am_dreg &&ap->mode != am_immed&& ap->mode != am_freg) {
													sz = natural_size(ep->v.p[0]);
													if (sz < 4 && sz >-4) 
														do_extend(ap,sz,4,F_DREG);
												}
												if (ap->mode == am_freg) {
													gen_code(op_push,4,makedreg(3),0);
													ap2 = make_immed(0);
													ap2->preg = ESP;
													ap2->mode = am_indisp;
													gen_codef(op_fistp,4,ap2,0);
													gen_codef(op_fwait,0,0,0);
												}
												else
													gen_code(op_push,4,ap,0);
												break;
				}
        freeop(ap);
	stackdepth += rv;
	return(rv);
}
int push_stackblock(ENODE *ep)
{
	AMODE *ap;
	int sz = (ep->size + stackadd) &stackmod;
	if (!sz)
		return(0);
	gen_code(op_sub,4,makedreg(ESP),make_immed(sz));
	gen_code(op_push,4,makedreg(ESI),0);
	gen_code(op_push,4,makedreg(EDI),0);
	stackdepth+=sz+8;
	gen_code(op_lea,4,makedreg(EDI),make_stack(-8));
				switch (ep->nodetype) {
                case en_napccon:
                case en_nacon:
												ep->v.p[0] = ((SYM *)ep->v.p[0])->name;
                case en_nalabcon:
                case en_labcon:
                        ap = xalloc(sizeof(AMODE));
                        ap->mode = am_direct;
                        ap->offset = ep;     /* use as constant node */
                        gen_code(op_lea,4,makedreg(ESI),ap);
												break;
								case en_absacon:
												ep->v.i = (( SYM *)ep->v.p[0])->value.i;
                        ap = xalloc(sizeof(AMODE));
                        ap->mode = am_direct;
                        ap->offset = ep;     /* use as constant node */
                        gen_code(op_lea,4,makedreg(ESI),ap);
												break;
								default:
      			  					ap = gen_expr(ep,F_DREG | F_MEM | F_IMMED,4);
												gen_code(op_mov,4,makedreg(ESI),ap);
												break;
				}
	gen_code(op_mov,4,makedreg(ECX),make_immed(sz));
	gen_code(op_cld,0,0,0);
	gen_code(op_rep,0,0,0);
	gen_code(op_movsb,0,0,0);
	gen_code(op_pop,4,makedreg(EDI),0);
	gen_code(op_pop,4,makedreg(ESI),0);
	stackdepth-=8;
	freeop(ap);
	return(sz);
}

int     gen_parms(ENODE *plist,int size)
/*
 *      push a list of parameters onto the stack and return the
 *      size of parameters pushed.
 */
{       int     i;
        i = 0;
        while( plist != 0 )
                {         	
								if (plist->nodetype == en_stackblock)
									i+=push_stackblock(plist->v.p[0]);
								else
                	i+=push_param(plist->v.p[0],size);
                plist = plist->v.p[1];
                }
        return i;
}

AMODE    *gen_fcall(ENODE *node,int flags, int size)
/*
 *      generate a function call node and return the address mode
 *      of the result.
 */
{       AMODE    *ap, *result;
				ENODE *node2;
        int             i,ssize;
        result = temp_data();
        temp_data(); temp_data();       /* push any used data registers */
        freeop(result); freeop(result); freeop(result);
				if (node->nodetype == en_callblock) {
					i = gen_parms(node->v.p[1]->v.p[1]->v.p[1]->v.p[0],size);
      		ap = gen_expr(node->v.p[0],F_ALL,4);
					gen_code(op_push,4,ap,0);
					i+=4;
					stackdepth+=4;
					node = node->v.p[1];
					freeop(ap);
					ssize = 4;
				}
				else {
	        i = gen_parms(node->v.p[1]->v.p[1]->v.p[0],size);    /* generate parameters */
					ssize = node->v.p[0]->v.i;
				}
				if (node->nodetype == en_intcall) {
					AMODE *ap2 = xalloc(sizeof(AMODE));
					ap2->mode = am_seg;
					ap2->seg = e_cs;
					gen_code(op_pushfd,0,0,0);
					gen_code(op_push,0,ap2,0);
				}
									
   	    if( node->v.p[1]->v.p[0]->nodetype == en_nacon || node->v.p[1]->v.p[0]->nodetype == en_napccon ) {
								SYM *sp= node->v.p[1]->v.p[0]->v.p[0];
								if (sp->inreg) {
									ap = makedreg(sp->value.i);
								}
								else {
									node->v.p[1]->v.p[0]->v.p[0] = sp->name;
     	          	ap = make_offset(node->v.p[1]->v.p[0]);
									ap->mode = am_immed;
								}
         	      gen_code(op_call,0,ap,0);
				}
 	      else
   	            {
								if (node->v.p[1]->v.p[0]->nodetype == en_l_ref) {
									node2=node->v.p[1]->v.p[0]->v.p[0];
								}
								else {
									if (node->v.p[1]->v.p[0]->nodetype != en_tempref)
										DIAG("gen_fcall - questionable indirection");
									node2=node->v.p[1]->v.p[0];
								}
     	          ap = gen_expr(node2,F_ALL,4);
       	        freeop(ap);
         	      gen_code(op_call,4,ap,0);
                }
        if( i != 0 ) {
								if (i == 4)
									gen_code(op_pop,4,makedreg(ECX),0);
								else
                	gen_code(op_add,4,makedreg(4),make_immed(i));
								stackdepth -= i;
				}
				if (ssize > 4) {
						result = fstack();
				}
				else {
          result = temp_data();
        	if( result->preg != EAX)
                gen_code(op_mov,4,result,makedreg(EAX));
				}
				result->tempflag = 1;
				do_extend(result,ssize,size,flags);
				make_legal(result,flags,size);
        return result;
}
AMODE    *gen_pfcall(ENODE *node,int flags, int size)
/*
 *      generate a function call node to a pascal function
 *			and return the address mode of the result.
 */
{       AMODE    *ap, *result;
        int             i,ssize;
				ENODE * invnode = 0,*anode,*node2;
				
				/* invert the parameter list */
				if (node->nodetype == en_pcallblock)
					anode = node->v.p[1]->v.p[1]->v.p[1]->v.p[0];
				else
					anode = node->v.p[1]->v.p[1]->v.p[0];
				while (anode) {
					invnode = makenode(anode->nodetype,anode->v.p[0],invnode);
					anode = anode->v.p[1];
				}
        result = temp_data();
        temp_data(); temp_data();       /* push any used data registers */
        freeop(result); freeop(result); freeop(result);
				if (node->nodetype == en_pcallblock) {
      		ap = gen_expr(node->v.p[0],F_ALL,4);
					gen_code(op_push,4,ap,0);
					freeop(ap);
					i=4;
					stackdepth+=4;
					i += gen_parms(invnode,size);
					node = node->v.p[1];
					ssize = 4;
				}
				else {
	        i = gen_parms(invnode,size);    /* generate parameters */
					ssize = node->v.p[0]->v.i;
				}
									
   	    if( node->v.p[1]->v.p[0]->nodetype == en_nacon || node->v.p[1]->v.p[0]->nodetype == en_napccon ) {
								SYM *sp= node->v.p[1]->v.p[0]->v.p[0];
								if (sp->inreg) {
									ap = makedreg(sp->value.i);
								}
								else {
									node->v.p[0]->v.p[0]->v.p[0] = sp->name;
     	          	ap = make_offset(node->v.p[1]->v.p[0]);
									ap->mode = am_immed;
								}
         	      gen_code(op_call,0,ap,0);
				}
 	      else
   	            {
								if (node->v.p[1]->v.p[0]->nodetype == en_l_ref) {
									node2=node->v.p[1]->v.p[0]->v.p[0];
								}
								else {
									if (node->v.p[1]->v.p[0]->nodetype != en_tempref)
										DIAG("gen_fcall - questionable indirection");
									node2=node->v.p[1]->v.p[0];
								}
     	          ap = gen_expr(node2,F_ALL,4);
       	        freeop(ap);
         	      gen_code(op_call,4,ap,0);
                }
				stackdepth -= i;
				if (ssize > 4) {
						result = fstack();
				}
				else {
          result = temp_data();
        	if( result->preg != EAX)
                gen_code(op_mov,4,result,makedreg(EAX));
				}
				result->tempflag = 1;
				do_extend(result,ssize,size,flags);
				make_legal(result,flags,size);
        return result;
}

AMODE    *gen_expr(ENODE *node, int flags, int size)
/*
 *      general expression evaluation. returns the addressing mode
 *      of the result.
 */
{
				AMODE    *ap1, *ap2;
        int             lab0, lab1;
        int             natsize;
        if( node == 0 )
                {
                DIAG("null node in gen_expr.");
                return 0;
                }
        switch( node->nodetype )
                {
								case en_bits:
												size = natural_size(node->v.p[0]);
												ap1 = gen_expr(node->v.p[0],F_ALL,size);
												if (!(flags & F_NOBIT))
													bit_legal(ap1,node,size);
												return ap1;
								case en_cb: 
								case en_cub:
								case en_cw: 
								case en_cuw:
								case en_cl: 
								case en_cul:
								case en_cf: 
								case en_cd: 
						

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品成人网| 亚洲国产精品成人综合色在线婷婷| 成人毛片老司机大片| 精品综合久久久久久8888| 午夜久久久影院| 午夜精品影院在线观看| 一区二区三区四区av| 亚洲精品国产精华液| 亚洲精品少妇30p| 亚洲第一综合色| 青娱乐精品在线视频| 蜜桃av噜噜一区二区三区小说| 蜜臀av性久久久久蜜臀aⅴ流畅| 精彩视频一区二区三区| 国产成人亚洲综合a∨猫咪| 国产不卡免费视频| 91浏览器打开| 欧美日韩国产色站一区二区三区| 欧美精品vⅰdeose4hd| 欧美白人最猛性xxxxx69交| 久久婷婷久久一区二区三区| 中文文精品字幕一区二区| 18欧美乱大交hd1984| 天天综合网 天天综合色| 免费黄网站欧美| 成人app网站| 欧美精品久久99久久在免费线| 久久婷婷一区二区三区| 一区二区日韩av| 蜜臀久久久99精品久久久久久| 国产91高潮流白浆在线麻豆| 欧美最猛黑人xxxxx猛交| 2020日本不卡一区二区视频| 玉足女爽爽91| 丁香啪啪综合成人亚洲小说| 欧洲人成人精品| 国产区在线观看成人精品| 亚洲欧美视频在线观看| 老司机精品视频线观看86| 色综合天天狠狠| 精品欧美一区二区久久| 一区二区三区资源| 国产白丝精品91爽爽久久 | 日韩久久一区二区| 免费在线视频一区| 91在线国产福利| 日韩三级在线观看| 一区二区三区在线观看网站| 国产激情精品久久久第一区二区 | 国产剧情一区二区| 欧美丝袜丝交足nylons| 国产精品久久久久久久久久久免费看| 五月天欧美精品| 色妞www精品视频| 久久久精品免费网站| 日韩精品一区第一页| 在线视频国产一区| 亚洲视频免费在线| 成人性色生活片| 久久综合色综合88| 久久99国内精品| 日韩女优av电影在线观看| 日韩国产一区二| 欧美日韩日日夜夜| 亚洲成av人片在线观看| 在线观看免费一区| 亚洲一区二区三区四区中文字幕| 99riav一区二区三区| 中文字幕一区二区三| 大桥未久av一区二区三区中文| 精品国免费一区二区三区| 精品一区二区久久| 精品国产乱码久久| 国产精品99久| 国产精品国产精品国产专区不片| 高清不卡在线观看av| 日本一区二区不卡视频| 成人免费视频caoporn| 国产精品视频一二三| 97久久精品人人澡人人爽| 国产精品久久久久精k8 | 欧美日韩国产综合草草| 亚洲高清三级视频| 91精品国产综合久久久久久漫画| 五月激情综合色| 精品捆绑美女sm三区| 国产乱码字幕精品高清av| 国产精品网站在线| 色综合久久中文字幕综合网| 亚洲第一成年网| 欧美www视频| 成人伦理片在线| 亚洲图片欧美综合| 日韩午夜在线影院| 国产精品2024| 一区二区成人在线观看| 欧美一级一区二区| 成人精品免费视频| 亚洲成人动漫一区| www亚洲一区| 在线视频综合导航| 美女视频一区二区三区| 国产精品入口麻豆九色| 欧美三级视频在线观看| 国产精品资源在线| 一区二区三区波多野结衣在线观看 | 国产精品综合av一区二区国产馆| 国产精品动漫网站| 91.成人天堂一区| 国产激情91久久精品导航| 亚洲午夜国产一区99re久久| 欧美成人乱码一区二区三区| 成人av影视在线观看| 日本vs亚洲vs韩国一区三区 | 欧美精品日韩一区| 丁香婷婷综合网| 日本最新不卡在线| 亚洲精品欧美专区| 久久久久久久综合狠狠综合| 欧美日韩综合在线| www.视频一区| 国产一区二区三区不卡在线观看 | 亚洲国产精品一区二区尤物区| 精品成人私密视频| 欧美久久高跟鞋激| 91成人免费电影| 国产91高潮流白浆在线麻豆 | 亚洲动漫第一页| 亚洲狼人国产精品| 国产精品天美传媒沈樵| 欧美α欧美αv大片| 欧美日韩色综合| 91精品福利在线| 95精品视频在线| 成人av电影在线| 国产成人av资源| 国产剧情一区二区三区| 久国产精品韩国三级视频| 水蜜桃久久夜色精品一区的特点 | 麻豆91精品91久久久的内涵| 一级特黄大欧美久久久| 亚洲日本在线观看| 中文字幕中文字幕中文字幕亚洲无线| 精品国产免费久久| 亚洲精品在线免费播放| 日韩欧美久久久| 日韩欧美在线一区二区三区| 欧美挠脚心视频网站| 欧美午夜影院一区| 欧美色精品天天在线观看视频| 日本精品一级二级| 日本韩国欧美三级| 欧美天堂一区二区三区| 欧美日韩在线观看一区二区| 欧美伊人久久大香线蕉综合69| 色婷婷av一区| 欧美丰满少妇xxxbbb| 8x8x8国产精品| 欧美精品一区男女天堂| 国产欧美精品在线观看| 国产精品狼人久久影院观看方式| 国产精品久久久久久久裸模| 亚洲女同ⅹxx女同tv| 一级女性全黄久久生活片免费| 亚洲成av人片在线观看| 久久机这里只有精品| 高清视频一区二区| 91麻豆免费在线观看| 欧美电影一区二区三区| 精品国产一区二区三区av性色| 久久精品夜色噜噜亚洲a∨| 亚洲图片激情小说| 午夜精品福利在线| 激情综合色综合久久综合| va亚洲va日韩不卡在线观看| 在线一区二区三区四区| 日韩欧美一区电影| 国产欧美精品一区| 亚洲高清久久久| 国产精品一卡二| 色综合中文字幕| 精品国产一区二区三区四区四| 国产精品久久一级| 日产国产欧美视频一区精品| 大胆欧美人体老妇| 欧美乱妇15p| 国产精品久久夜| 日韩精品欧美精品| 成人美女视频在线观看| 欧美日韩不卡视频| 国产精品视频一二三区| 日韩二区三区在线观看| 成人a免费在线看| 日韩视频在线你懂得| 亚洲日本韩国一区| 国产露脸91国语对白| 欧美日韩第一区日日骚| 国产精品亲子伦对白| 美腿丝袜亚洲一区| 欧美丝袜丝交足nylons图片|