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

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

?? optimize.c

?? C語言編譯器的源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * 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
 *
 */
/*
 * this module combines constants at compile time.  Integer constants
 * will get combined slightly better than floating point ones
 */
#include        <stdio.h>
#include        "expr.h"
#include        "c.h"

int maxinttype(ENODE *ep1, ENODE *ep2)
{
	int type1=ep1->nodetype;
	int type2 = ep2->nodetype;
	if (type1 == en_lucon || type2 == en_lucon)
		return en_lucon;
	if (type1 == en_lcon || type2 == en_lcon)
		return en_lcon;
	if (type1 == en_iucon || type2 == en_iucon)
		return en_iucon;
	if (type1 == en_icon || type2 == en_icon)
		return en_icon;
	return en_ccon;
}
int maxfloattype(ENODE *ep1, ENODE *ep2)
{
	int type1=ep1->nodetype;
	int type2 = ep2->nodetype;
	if (type1 == en_lrcon || type2 == en_lrcon)
		return en_lrcon;
	if (type1 == en_rcon || type2 == en_rcon)
		return en_rcon;
	return en_fcon;
}
int getmode(ENODE *ep1,ENODE *ep2)
/*
 * get the constant mode of a pair of nodes
 * 0 = Neither node is a constant
 * 1 = icon,icon
 * 2 = icon,rcon
 * 3 = rcon,icon
 * 4 = rcon,rcon
 * 5 = icon,nothing
 * 6 = rcon,nothing
 * 7 = nothing,icon
 * 8 = nothing,rcon
 */
{
				int mode = 0;
				if (isintconst(ep1->nodetype) )
					if (ep2)  {
						if (isintconst(ep2->nodetype))
							mode = 1;
						else  if (ep2->nodetype == en_rcon || ep2->nodetype == en_lrcon || ep2->nodetype == en_fcon)
							mode = 2;
						else mode = 5;
					}
					else
						mode = 5;
				else if (ep1->nodetype == en_rcon || ep1->nodetype == en_lrcon || ep1->nodetype == en_fcon)
					if (ep2)  {
						if (isintconst(ep2->nodetype))
							mode = 3;
						else  if (ep2->nodetype == en_rcon || ep2->nodetype == en_lrcon || ep2->nodetype == en_fcon)
							mode = 4;
						else mode = 6;
					}
					else
						mode = 6;
				else if (ep2)
					if (isintconst(ep2->nodetype))
						mode = 7;
						else  if (ep2->nodetype == en_rcon || ep2->nodetype == en_lrcon || ep2->nodetype == en_fcon)
						mode = 8;
	return(mode);
}
	
void dooper(ENODE ** node, int mode)
/*
 *      dooper will execute a constant operation in a node and
 *      modify the node to be the result of the operation.
 *			It will also cast integers to floating point values when
 *			necessary
 */                             
{     ENODE    *ep,*ep1,*ep2;
      ep = *node;
			ep1 = ep->v.p[0];
			ep2 = ep->v.p[1];
			if (mode ==5) {
					if (floatrecurse(ep2)) {
					ep1->v.f = ep1->v.i;
					ep1->nodetype = en_rcon;
				}
				return;
			}
			else if (mode == 7) {
				if (floatrecurse(ep1)) {
					ep2->v.f = ep2->v.i;
					ep2->nodetype = en_rcon;
				}
				return;
			}
			else if (mode == 6 || mode == 8)
				return;
			else
        switch( ep->nodetype ) {
                case en_add:
										 		switch (mode) {
													case 1:	
                        		ep->nodetype = maxinttype(ep1,ep2);
                        		ep->v.i = ep1->v.i + ep2->v.i;
														break;
													case 2:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.i + ep2->v.f;
														break;
													case 3:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.f + ep2->v.i;
														break;
													case 4:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.f + ep2->v.f;
														break;
                        }
												break;
                case en_sub:
										 		switch (mode) {
													case 1:	
                        		ep->nodetype = maxinttype(ep1,ep2);
                        		ep->v.i = ep1->v.i - ep2->v.i;
														break;
													case 2:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.i - ep2->v.f;
														break;
													case 3:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.f - ep2->v.i;
														break;
													case 4:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.f - ep2->v.f;
														break;
												}
                        break;
								case en_pmul:
								case en_umul:
                case en_mul:
										 		switch (mode) {
													case 1:	
                        		ep->nodetype = maxinttype(ep1,ep2);
                        		ep->v.i = ep1->v.i * ep2->v.i;
														break;
													case 2:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.i * ep2->v.f;
														break;
													case 3:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.f * ep2->v.i;
														break;
													case 4:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.f * ep2->v.f;
														break;
												}
                        break;
								case en_pdiv:
                case en_div:
                case en_udiv:
										 		switch (mode) {
													case 1:	
                        		ep->nodetype = maxinttype(ep1,ep2);
                        		ep->v.i = ep1->v.i / ep2->v.i;
														break;
													case 2:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.i / ep2->v.f;
														break;
													case 3:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.f / ep2->v.i;
														break;
													case 4:	
                        		ep->nodetype = maxfloattype(ep1,ep2);
                        		ep->v.f = ep1->v.f / ep2->v.f;
														break;
												}
                        break;
								case en_mod:
                        		ep->nodetype = maxinttype(ep1,ep2);
												ep->v.i = ep1->v.i % ep2->v.i;
												break;
                case en_lsh:
								case en_alsh:
                        		ep->nodetype = maxinttype(ep1,ep2);
                        ep->v.i = ep1->v.i << ep2->v.i;
                        break;
                case en_rsh:
								case en_arsh:
                        		ep->nodetype = maxinttype(ep1,ep2);
                        ep->v.i = ep1->v.i >> ep2->v.i;
                        break;
                case en_and:
                        		ep->nodetype = maxinttype(ep1,ep2);
                        ep->v.i = ep1->v.i & ep2->v.i;
                        break;
                case en_or:
                        		ep->nodetype = maxinttype(ep1,ep2);
                        ep->v.i = ep1->v.i | ep2->v.i;
                        break;
                case en_xor:
                        		ep->nodetype = maxinttype(ep1,ep2);
                        ep->v.i = ep1->v.i ^ ep2->v.i;
                        break;
                }
}
/*
 * this stuff has been superceded by a lookup table
 * I'll fix it eventually
 */
long     pwrof2(int i)
/*
 *      return which power of two i is or -1.
 */
{       long     p, q;
        q = 2;
        p = 1;
        while( q > 0 )
                {
                if( q == i )
                        return p;
                q <<= 1;
                ++p;
                }
        return -1;
}

long     mod_mask(int i)
/*
 *      make a mod mask for a power of two.
 */
{       long     m;
        m = 0;
        while( i-- )
                m = (m << 1) | 1;
        return m;
}

void opt0(ENODE ** node)
/*
 *      opt0 - delete useless expressions and combine constants.
 *
 *      opt0 will delete expressions such as x + 0, x - 0, x * 0,
 *      x * 1, 0 / x, x / 1, x mod 0, etc from the tree pointed to
 *      by node and combine obvious constant operations. It cannot
 *      combine name and label constants but will combine icon type
 *      nodes.
 */
{       ENODE    *ep;
        int             sc,mode,val;
				double dval;
        ep = *node;
        if( ep == 0 )
                return;
        switch( (*node)->nodetype ) {
                case en_b_ref:
                case en_w_ref:          /* optimize unary node */
                case en_ub_ref:
                case en_uw_ref:          /* optimize unary node */
                case en_l_ref:
								case en_ul_ref:
								case en_floatref: case en_doubleref: case en_longdoubleref:
								case en_cb: case en_cub:
								case en_cw: case en_cuw:
								case en_cl: case en_cul:
								case en_cf: case en_cd: case en_cp: case en_bits: case en_cld:
				case en_ainc:
				case en_adec:
				case en_not:
				case en_compl:
                        opt0( &((*node)->v.p[0]));
                        return;
                case en_uminus:
                        opt0( &(ep->v.p[0]));
                        if( isintconst(ep->v.p[0]->nodetype))
                                {
                                ep->nodetype = ep->v.p[0]->nodetype;
                                ep->v.i = -ep->v.p[0]->v.i;
                                }
                        else if( ep->v.p[0]->nodetype == en_rcon || ep->v.p[0]->nodetype == en_fcon || ep->v.p[0]->nodetype == en_lrcon)
                                {
                                ep->nodetype = ep->v.p[0]->nodetype;
                                ep->v.i = -ep->v.p[0]->v.f;
                                }
                        return;
                case en_add:
                case en_sub:
                        opt0(&(ep->v.p[0]));
                        opt0(&(ep->v.p[1]));
												mode = getmode(ep->v.p[0],ep->v.p[1]);
												switch (mode) {
													case 1: case 2: case 3: case 4:
														dooper(node,mode);
														break;
													case 5:
														if (ep->v.p[0]->v.i == 0) {
															if (ep->nodetype == en_sub) {
																*node = makenode(en_uminus,ep->v.p[1],0);
															}
															else *node = ep->v.p[1];
														}
														else dooper(node,mode);
														break;
													case 6:
														if (ep->v.p[0]->v.f == 0) {
															if (ep->nodetype == en_sub) {
																*node = ep->v.p[1];
																ep->v.p[1]->v.f = - ep->v.p[1]->v.f;

															}
															else *node = ep->v.p[1];
														}
														else dooper(node,mode);
														break;
												  case 7:
														if (ep->v.p[1]->v.i == 0) {
															*node = ep->v.p[0];
														}
														else dooper(node,mode);
														break;
													case 8:
														if (ep->v.p[1]->v.f == 0) {
															*node = ep->v.p[0];
														}
														else dooper(node,mode);
														break;
												}
                        return;
                case en_mul:
								case en_umul:
								case en_pmul:
								case en_asmul: case en_asumul:
                        opt0(&(ep->v.p[0]));
                        opt0(&(ep->v.p[1]));
												mode = getmode(ep->v.p[0],ep->v.p[1]);
												switch(mode) {
													case 1: case 2: case 3: case 4:
														dooper(node,mode);
														break;
													case 5:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩成人精品在线观看| 精品国产91久久久久久久妲己| 国产精品网站一区| 蜜乳av一区二区三区| 色综合久久天天| 久久午夜羞羞影院免费观看| 日日骚欧美日韩| 在线播放亚洲一区| 麻豆91精品视频| 精品99一区二区| 久久av老司机精品网站导航| 日韩午夜电影av| 久久精品国产亚洲高清剧情介绍 | 欧美老肥妇做.爰bbww视频| 亚洲成人激情自拍| 精品人在线二区三区| 成人午夜私人影院| 中文字幕一区二区三中文字幕| 91啪亚洲精品| 偷拍一区二区三区四区| 欧美成人三级在线| 99久久er热在这里只有精品15| 亚洲欧洲日韩av| 91精品国产综合久久婷婷香蕉 | 欧美成人免费网站| 99久久精品国产观看| 蜜桃视频在线一区| 国产日韩欧美精品电影三级在线| av亚洲产国偷v产偷v自拍| 天天色天天爱天天射综合| 洋洋av久久久久久久一区| 色婷婷综合久久久久中文| 日韩极品在线观看| 亚洲另类在线制服丝袜| 久久综合狠狠综合久久综合88| 99re这里只有精品6| 精品一区二区在线播放| 婷婷国产在线综合| 一区二区三区中文字幕精品精品 | 久久九九久久九九| 337p亚洲精品色噜噜狠狠| 成人网在线免费视频| 久久草av在线| 性做久久久久久免费观看| 国产精品免费看片| 国产午夜精品美女毛片视频| 精品国产制服丝袜高跟| 欧美视频在线一区| 一本色道久久综合亚洲91| 不卡av免费在线观看| 国产精品88av| 国产凹凸在线观看一区二区| 狠狠色综合播放一区二区| 国产一区欧美二区| 国产毛片精品视频| 麻豆成人久久精品二区三区小说| 五月天网站亚洲| 五月天丁香久久| 人人狠狠综合久久亚洲| 日本午夜精品视频在线观看| 日本不卡一二三| 日本人妖一区二区| 高清免费成人av| 粉嫩蜜臀av国产精品网站| 麻豆精品国产91久久久久久| 久久99精品久久久久婷婷| 久久99热国产| 成人深夜福利app| 欧美午夜精品免费| 日韩精品在线看片z| 久久久久久久一区| 亚洲精品成人a在线观看| 天堂久久久久va久久久久| 国产在线视频一区二区三区| 色综合激情久久| 欧美一区二区三区婷婷月色| 久久免费看少妇高潮| 一区二区三区在线视频观看58| 亚洲国产一区二区a毛片| 九九九精品视频| 欧美日韩三级在线| 精品处破学生在线二十三| 国产精品美女久久久久av爽李琼 | 国产午夜三级一区二区三| 日韩电影在线免费观看| voyeur盗摄精品| 日韩免费观看2025年上映的电影| 亚洲综合男人的天堂| 国产精品主播直播| 在线91免费看| 午夜精品久久久久久久99樱桃| jlzzjlzz国产精品久久| 国产亚洲成年网址在线观看| 久久综合综合久久综合| 欧美群妇大交群中文字幕| 中文字幕一区二区三区在线不卡| 国产一区二区三区精品视频| 欧美a一区二区| 欧美吻胸吃奶大尺度电影| 亚洲精品欧美在线| 色噜噜狠狠一区二区三区果冻| 最新欧美精品一区二区三区| 成人激情免费网站| 亚洲激情图片一区| 精品婷婷伊人一区三区三| 日日摸夜夜添夜夜添国产精品| 欧美色精品在线视频| 日韩影视精彩在线| 久久综合五月天婷婷伊人| 国产成人免费视| 一区二区三区四区av| 欧美一激情一区二区三区| 福利电影一区二区| 亚洲乱码国产乱码精品精的特点| 日韩女优电影在线观看| 国产成人av电影免费在线观看| 69精品人人人人| 亚洲黄色av一区| 6080日韩午夜伦伦午夜伦| 国产美女视频91| 亚洲国产综合人成综合网站| 欧美老肥妇做.爰bbww视频| 不卡视频在线观看| 日本sm残虐另类| 国产欧美一区在线| 欧美日韩一区二区三区不卡| 成人高清视频免费观看| 亚洲一区二区三区国产| 精品sm捆绑视频| 一本久久综合亚洲鲁鲁五月天| 精品一区二区三区免费播放| 亚洲一区成人在线| 久久久久久影视| 欧美一区二区三区在线看| 91成人国产精品| 一本到高清视频免费精品| 免费一级欧美片在线观看| 自拍偷拍国产亚洲| 国产日韩一级二级三级| 精品国产一区二区三区久久影院| 色综合久久综合中文综合网| 成人在线综合网| 成人av电影免费在线播放| 国产成人在线看| 国产精选一区二区三区 | 欧美日韩激情一区| 欧美一级一区二区| 欧美人与性动xxxx| 欧美v国产在线一区二区三区| 日本道精品一区二区三区| 色婷婷综合久久久| 欧美一区二区免费| 久久这里只有精品视频网| 精品不卡在线视频| 久久久久久日产精品| 亚洲国产精华液网站w| 中文字幕国产精品一区二区| 亚洲天堂2014| 日本不卡一区二区| 国产成人精品影院| 色偷偷成人一区二区三区91 | 国产一区二区三区精品视频| 国产aⅴ精品一区二区三区色成熟| aaa欧美色吧激情视频| 6080午夜不卡| 久久久久97国产精华液好用吗| 国产欧美精品一区aⅴ影院| 亚洲精品久久久久久国产精华液| 亚洲一区二区三区在线播放| 狠狠色丁香婷综合久久| 色视频成人在线观看免| 精品国产一区二区三区四区四| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 91一区二区三区在线观看| 欧美色综合影院| 久久综合久久综合九色| 伊人色综合久久天天| 国产成人精品三级麻豆| 精品区一区二区| 亚洲国产一区二区三区| 99视频一区二区三区| 久久精品综合网| 国产精品乡下勾搭老头1| 91精品综合久久久久久| 五月天亚洲精品| 欧美日韩成人一区二区| 亚洲免费观看视频| 国产成人午夜片在线观看高清观看| 久久新电视剧免费观看| 午夜国产精品影院在线观看| 99精品欧美一区| 亚洲天堂福利av| www.在线成人| 中文天堂在线一区| 成人app网站| 中文字幕欧美国产| 99国产精品国产精品久久| 最新热久久免费视频| 精品视频1区2区3区| 五月婷婷色综合|