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

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

?? simp.c

?? 非常好的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "c.h"

#define foldcnst(TYPE,VAR,OP,RTYPE) \
	if (l->op == CNST+TYPE && r->op == CNST+TYPE) {\
		p = tree(CNST+ttob(RTYPE), RTYPE, NULL, NULL);\
		p->u.v.VAR = l->u.v.VAR OP r->u.v.VAR;\
		return p; }
#define commute(L,R) \
	if (generic(R->op) == CNST && generic(L->op) != CNST) {\
		Tree t = L; L = R; R = t; }
#define xfoldcnst(TYPE,VAR,OP,RTYPE,FUNC,MIN,MAX,needconst)\
	if (l->op == CNST+TYPE && r->op == CNST+TYPE\
	&& FUNC((double)l->u.v.VAR,(double)r->u.v.VAR,\
		(double)MIN,(double)MAX, needconst)) {\
		p = tree(CNST+ttob(RTYPE), RTYPE, NULL, NULL);\
		p->u.v.VAR = l->u.v.VAR OP r->u.v.VAR;\
		return p; }
#define cvtcnst(FTYPE,TTYPE,EXPR) \
	if (l->op == CNST+FTYPE) {\
		p = tree(CNST+ttob(TTYPE), TTYPE, NULL, NULL);\
		EXPR;\
		return p; }
#define xcvtcnst(FTYPE,TTYPE,VAR,MIN,MAX,EXPR) \
	if (l->op == CNST+FTYPE) {\
		if (needconst && (VAR < MIN || VAR > MAX))\
			warning("overflow in constant expression\n");\
		if (needconst || VAR >= MIN && VAR <= MAX) {\
			p = tree(CNST+ttob(TTYPE), TTYPE, NULL, NULL);\
			EXPR;\
			return p; } }
#define identity(X,Y,TYPE,VAR,VAL) \
	if (X->op == CNST+TYPE && X->u.v.VAR == VAL)\
		return Y
#define zerofield(OP,TYPE,VAR) \
	if (l->op == FIELD\
	&&  r->op == CNST+TYPE && r->u.v.VAR == 0)\
		return eqtree(OP, bittree(BAND, l->kids[0],\
			consttree(\
				fieldmask(l->u.field)<<fieldright(l->u.field),\
				unsignedtype)), r);
#define cfoldcnst(TYPE,VAR,OP,RTYPE) \
	if (l->op == CNST+TYPE && r->op == CNST+TYPE) {\
		p = tree(CNST+ttob(RTYPE), RTYPE, NULL, NULL);\
		p->u.v.i = l->u.v.VAR OP r->u.v.VAR;\
		return p; }
#define foldaddp(L,R,RTYPE,VAR) \
	if (L->op == CNST+P && R->op == CNST+RTYPE) {\
		p = tree(CNST+P, ty, NULL, NULL);\
		p->u.v.p = (char *)L->u.v.p + R->u.v.VAR;\
		return p; }
#define ufoldcnst(TYPE,EXP) if (l->op == CNST+TYPE) return EXP
#define sfoldcnst(TYPE,VAR,OP,RTYPE) \
	if (l->op == CNST+TYPE && r->op == CNST+I \
	&& r->u.v.i >= 0 && r->u.v.i < 8*l->type->size) { \
		p = tree(CNST+ttob(RTYPE), RTYPE, NULL, NULL); \
		p->u.v.VAR = l->u.v.VAR OP r->u.v.i; return p; }
#define geu(L,R,V) \
	if (R->op == CNST+U && R->u.v.u == 0) { \
		warning("result of unsigned comparison is constant\n"); \
		return tree(RIGHT, inttype, root(L), consttree(V, inttype)); }
#define idempotent(OP) if (l->op == OP) return l->kids[0];
#define utod(x)	(2.*(int)((unsigned)(x)>>1)+(int)((x)&1))
#define checkrange(val,minimum,maximum) \
	if (val < minimum || val > maximum) warning("Overflow in constant expression\n");

int needconst;
static int add ARGS((double, double, double, double, int));
static Tree addrtree ARGS((Tree, int, Type));
static int div ARGS((double, double, double, double, int));
static int mul ARGS((double, double, double, double, int));
static int sub ARGS((double, double, double, double, int));
Tree constexpr(int tok)
{
	Tree p;

	needconst++;
	p = expr1(tok);
	needconst--;
	return p;
}

int intexpr(int tok,int n)
{
	Tree p = constexpr(tok);

	needconst++;
	if (generic(p->op) == CNST && isint(p->type))
		n = cast(p, inttype)->u.v.i;
	else
		error(StrTab[85]);// <integer expression must be constant\n>
	needconst--;
	return n;
}
Tree simplify(int op,Type ty,Tree l,Tree r)
{
	int n;
	Tree p;

	if (optype(op) == 0)
		op += ttob(ty);
	switch (op) {
		case ADD+U:
			if (r->op == CNSTU || r->op == CNSTI) {
				if (r->u.v.i == 0)
					return l;
				if (l->op == ADD+U && l->kids[1]->op == CNSTU) {
					l->kids[1]->u.v.i += r->u.v.i;
					return l;
				}
			}
			foldcnst(U,u,+,unsignedtype);
			commute(r,l);
			break;
		case ADD+I:
			if (r->op == CNSTU || r->op == CNSTI) {
				if (r->u.v.i == 0)
					return l;
				if (l->op == ADD+I && l->kids[1]->op == CNSTI) {
					l->kids[1]->u.v.i += r->u.v.i;
					return l;
				}
			}
			xfoldcnst(I,i,+,inttype,add,INT_MIN,INT_MAX,needconst);
			commute(r,l);
			break;
		case ADD+L:
			commute(r,l);
			break;
		case CVC+I:
			cvtcnst(C,inttype, p->u.v.i =
				(l->u.v.sc&0200 ? (~0<<8) : 0)|(l->u.v.sc&0377));
			break;
		case CVU+S:
			if (l->op == CNSTU) {
				if (l->u.v.u > 0xffff && (int)l->u.v.u < -32766)
					warning(StrTab[86]);// <Overflow in constant expression\n>
			}
			cvtcnst(U,unsignedshort,p->u.v.us = l->u.v.u);
			break;
		case CVI+L:
		case CVU+L:
			cvtcnst(I,longlongtype,p->u.v.d = l->u.v.i); break;
		case CVL+I:
		case CVL+U:
			op = CVL+I;
//			xcvtcnst(L,  inttype,l->u.v.d,  INT_MIN,INT_MAX,
//				p->u.v.i  = (int)l->u.v.d); break;
			break;
		case CVL+D:
			break;

		case CVP+U:
			cvtcnst(P,unsignedtype, p->u.v.u  = (unsigned)l->u.v.p);
			break;
		case CVI+U:
			cvtcnst(I,unsignedtype, p->u.v.u  = l->u.v.i); break;

		case CVC+U:
			cvtcnst(C, unsignedtype,p->u.v.u  = l->u.v.uc);
			break;
		case CVF+D:  cvtcnst(F,   doubletype,p->u.v.d  = l->u.v.f);  break;
		case CVI+D:  cvtcnst(I,   doubletype,p->u.v.d  = l->u.v.i);  break;
		case CVS+I:  cvtcnst(S,      inttype,p->u.v.i  = l->u.v.ss); break;
		case CVS+U:  cvtcnst(S, unsignedtype,p->u.v.u  = l->u.v.us); break;
		case CVU+C:
			if (l->op == CNSTU && l->u.v.u > 255)
				warning(StrTab[87]);// <Overflow in constat expression\n>

			cvtcnst(U, unsignedchar,p->u.v.uc = l->u.v.u);
			break;
		case CVU+D:  cvtcnst(U,   doubletype,p->u.v.d  = utod(l->u.v.u)); break;
		case CVU+I:
			if (needconst && l->u.v.u > INT_MAX)
				warning(StrTab[88]);// <overflow in constant expression\n>
			if (needconst || l->u.v.u <= INT_MAX)
				cvtcnst(U,   inttype,p->u.v.i  = l->u.v.u);
			break;
		case CVU+P:  cvtcnst(U,    voidptype,p->u.v.p  = (void *)l->u.v.u);  break;
		case CVD+L:
			break;
		case CVI+C:
			if (l->op == CNSTI) {
				checkrange(l->u.v.i,SCHAR_MIN,SCHAR_MAX);
			}
			xcvtcnst(I, chartype,l->u.v.i,SCHAR_MIN,SCHAR_MAX,
				p->u.v.sc = l->u.v.i);
			break;
		case CVD+F:
			if (l->op == CNSTD)
				checkrange(l->u.v.d, -FLT_MAX,FLT_MAX);
			xcvtcnst(D,floattype,l->u.v.d, -FLT_MAX,FLT_MAX,
				p->u.v.f  = (float)l->u.v.d);
			break;
		case CVD+I:
			if (l->op == CNSTD)
				checkrange(l->u.v.d,INT_MIN,INT_MAX);
			xcvtcnst(D,  inttype,l->u.v.d,  INT_MIN,INT_MAX,
				p->u.v.i  = (int)l->u.v.d);
			break;
		case CVI+S:
			if (l->op == CNSTI)
				checkrange(l->u.v.i,SHRT_MIN,SHRT_MAX);
			xcvtcnst(I,shorttype,l->u.v.i, SHRT_MIN,SHRT_MAX,
				p->u.v.ss = l->u.v.i);
			break;

		case BAND+U:
			foldcnst(U,u,&,unsignedtype);
			commute(r,l);
			identity(r,l,U,u,(~(unsigned)0));
			if (r->op == CNST+U && r->u.v.u == 0)
				return tree(RIGHT, unsignedtype, root(l),
					consttree(0, unsignedtype));
			break;

		case MUL+U:
			if ((r->op == CNST+U || r->op == CNST+I) && r->u.v.u == 1)
				return l;
			commute(l,r);
			if (l->op == CNST+U && (n = ispow2(l->u.v.u)) != 0)
				return simplify(LSH+U, unsignedtype, r,
					consttree(n, inttype));
			foldcnst(U,u,*,unsignedtype);
			break;
		case NE+I:
			cfoldcnst(I,i,!=,inttype);
			commute(r,l);
			zerofield(NE,I,i);
			break;

		case EQ+I:
			cfoldcnst(I,i,==,inttype);
			commute(r,l);
			zerofield(EQ,I,i);
			break;
		case ADD+P:
			if (r->op == CNST+P) {
				if (r->u.v.i == 0)
					return retype(l,ty);
			}
			foldaddp(l,r,I,i);
			foldaddp(l,r,U,u);
			foldaddp(r,l,I,i);
			foldaddp(r,l,U,u);
			commute(r,l);
			identity(r,retype(l,ty),I,i,0);
			identity(r,retype(l,ty),U,u,0);
			if (isaddrop(l->op)
			&& (r->op == CNST+I || r->op == CNST+U))
				return addrtree(l, cast(r, inttype)->u.v.i, ty);
			if (l->op == ADD+P && isaddrop(l->kids[1]->op)
			&& (r->op == CNST+I || r->op == CNST+U))
				return simplify(ADD+P, ty, l->kids[0],
					addrtree(l->kids[1], cast(r, inttype)->u.v.i, ty));
			if ((l->op == ADD+I || l->op == SUB+I)
			&& l->kids[1]->op == CNST+I && isaddrop(r->op))
				return simplify(ADD+P, ty, l->kids[0],
					simplify(generic(l->op)+P, ty, r, l->kids[1]));
			if (l->op == ADD+P && generic(l->kids[1]->op) == CNST
			&& generic(r->op) == CNST)
				return simplify(ADD+P, ty, l->kids[0],
					(*optree['+'])(ADD, l->kids[1], r));
			if (l->op == ADD+I && generic(l->kids[1]->op) == CNST
			&&  r->op == ADD+P && generic(r->kids[1]->op) == CNST)
				return simplify(ADD+P, ty, l->kids[0],
					simplify(ADD+P, ty, r->kids[0],
					(*optree['+'])(ADD, l->kids[1], r->kids[1])));
			if (l->op == RIGHT && l->kids[1])
				return tree(RIGHT, ty, l->kids[0],
					simplify(ADD+P, ty, l->kids[1], r));
			else if (l->op == RIGHT && l->kids[0])
				return tree(RIGHT, ty,
					simplify(ADD+P, ty, l->kids[0], r), NULL);
			break;

		case ADD+D:
			if (r->op == CNST+D &&
				r->u.v.d == 0.0)
				return l;
			xfoldcnst(D,d,+,doubletype,add,-DBL_MAX,DBL_MAX,0);
			commute(r,l);
			break;
		case ADD+F:
			if (r->op == CNST+D &&
				r->u.v.d == 0.0)
				return l;
			xfoldcnst(F,f,+,floattype,add,-FLT_MAX,FLT_MAX,0);
			commute(r,l);
			break;
		case AND+I:
			op = AND;
			ufoldcnst(I,l->u.v.i ? cond(r) : l);	/* 0&&r => 0, 1&&r => r */
			break;
		case AND+L:
		case BAND+L:
			break;
		case OR+I:
			op = OR;
			/* 0||r => r, 1||r => 1 */
			ufoldcnst(I,l->u.v.i ? consttree(1, inttype) : cond(r));
			break;
		case BCOM+I:
			ufoldcnst(I,consttree(~l->u.v.i, inttype));
			idempotent(BCOM+U);
			op = BCOM+U;
			break;
		case BCOM+L:
			ufoldcnst(I,consttree(~l->u.v.i, inttype));
			break;
		case BCOM+U:
			ufoldcnst(U,consttree(~l->u.v.u, unsignedtype));
			idempotent(BCOM+U);
			break;
		case BOR+U:
			foldcnst(U,u,|,unsignedtype);
			commute(r,l);
			identity(r,l,U,u,0);
			break;
		case BXOR+U:
			foldcnst(U,u,^,unsignedtype);
			commute(r,l);
			identity(r,l,U,u,0);
			break;
		case DIV+D:
			xfoldcnst(D,d,/,doubletype,div,-DBL_MAX,DBL_MAX,0);
			break;
		case DIV+L:
			xfoldcnst(L,d,/,longlongtype,div,-DBL_MAX,DBL_MAX,0);
			break;
		case DIV+F:
			xfoldcnst(F,f,/,floattype,div,-FLT_MAX,FLT_MAX,0);
			break;
		case DIV+I:
			identity(r,l,I,i,1);
#ifdef mips
			if (l->op == CNST+I && r->op == CNST+I && r->u.v.i == -1
			&& !div((double)l->u.v.i, (double)r->u.v.i, (double)INT_MIN, (double)INT_MAX, 0))
				break;
#endif
			xfoldcnst(I,i,/,inttype,div,INT_MIN,INT_MAX,needconst);
			break;
		case DIV+U:
			identity(r,l,U,u,1);
			if (r->op == CNST+U && r->u.v.u == 0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合色婷婷| 激情综合色丁香一区二区| 18欧美亚洲精品| 亚洲国产电影在线观看| 国产午夜精品久久久久久久| 久久久久久一二三区| 久久久亚洲高清| 国产亚洲欧美日韩俺去了| 久久精品人人爽人人爽| 国产视频一区二区三区在线观看| 国产天堂亚洲国产碰碰| 国产精品国产a级| 亚洲免费视频成人| 亚洲黄色性网站| 性久久久久久久久久久久| 亚洲成人av一区二区| 日本欧美一区二区| 91麻豆自制传媒国产之光| 91蜜桃网址入口| 欧美色爱综合网| 91精品欧美综合在线观看最新| 欧美一区二区三区播放老司机| 欧美成va人片在线观看| 国产亚洲人成网站| 亚洲免费伊人电影| 日日夜夜免费精品| 国产资源在线一区| 成人av在线网| 欧美精品国产精品| 久久久久久麻豆| 一区在线中文字幕| 香蕉加勒比综合久久| 久久成人综合网| 不卡的av在线| 欧美丝袜丝交足nylons图片| 欧美一级二级在线观看| 中日韩免费视频中文字幕| 亚洲精品视频在线看| 免费人成在线不卡| 成人av在线资源| 69p69国产精品| 国产精品萝li| 午夜精品久久久久久久99樱桃| 精品一区二区在线看| 成人的网站免费观看| 欧美浪妇xxxx高跟鞋交| 国产日韩欧美高清在线| 亚洲成人你懂的| 国产盗摄一区二区三区| 欧美午夜一区二区三区| 国产日韩精品视频一区| 婷婷久久综合九色国产成人| 国产精品66部| 欧美探花视频资源| 国产情人综合久久777777| 香蕉久久夜色精品国产使用方法 | 亚洲一本大道在线| 韩国在线一区二区| 欧美色国产精品| 国产精品久久精品日日| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美成人三级电影在线| 一区二区三区在线不卡| 国产伦精品一区二区三区免费迷 | 97精品超碰一区二区三区| 日韩视频免费直播| 一区二区三区蜜桃网| 国产成人亚洲精品青草天美| 欧美一区二区人人喊爽| 亚洲一区二区在线观看视频 | 91蜜桃网址入口| 久久久99精品久久| 久久国产精品第一页| 欧美视频一区二区在线观看| 亚洲欧洲www| 国产精华液一区二区三区| 欧美一级高清片在线观看| 亚洲二区在线观看| 日本韩国视频一区二区| 日本vs亚洲vs韩国一区三区| 94-欧美-setu| 中文字幕国产一区| 国产精品一区二区久久精品爱涩 | 国产精品麻豆视频| 国产成人亚洲综合a∨婷婷图片| 日韩一级二级三级| 视频一区二区不卡| 欧美三日本三级三级在线播放| 成人欧美一区二区三区| 成人黄页在线观看| 国产农村妇女毛片精品久久麻豆 | 国产在线一区观看| 精品国产一二三| 免费欧美日韩国产三级电影| 欧美日韩成人综合天天影院| 一二三区精品视频| 色综合激情五月| 亚洲日穴在线视频| 一本久久精品一区二区| 亚洲欧洲日韩在线| 91免费在线视频观看| 亚洲人精品午夜| 色欧美乱欧美15图片| 亚洲日本丝袜连裤袜办公室| 99视频精品免费视频| 136国产福利精品导航| 91影视在线播放| 亚洲精品欧美专区| 欧美性色黄大片| 日本视频在线一区| 精品国产1区2区3区| 黄页视频在线91| 国产婷婷一区二区| av中文一区二区三区| 亚洲精品国产一区二区三区四区在线 | 国产麻豆视频一区| 中文字幕乱码亚洲精品一区| 成人短视频下载| 亚洲精品乱码久久久久久黑人 | 色悠悠亚洲一区二区| 亚洲精品水蜜桃| 在线成人av影院| 久久成人久久鬼色| 中文字幕+乱码+中文字幕一区| 成人性视频网站| 亚洲少妇屁股交4| 欧洲精品一区二区| 美美哒免费高清在线观看视频一区二区| 日韩一区二区电影| 国产91精品精华液一区二区三区| 国产精品久久久久天堂| 在线观看三级视频欧美| 日本亚洲三级在线| 欧美变态tickle挠乳网站| 国产福利视频一区二区三区| 中文字幕日韩av资源站| 欧美日韩精品福利| 久久99精品久久久久久国产越南| 中文字幕乱码一区二区免费| 欧美中文字幕一区| 久久国产视频网| 国产精品国产三级国产普通话99| 91国偷自产一区二区开放时间| 丝袜美腿亚洲一区二区图片| 国产日韩欧美不卡在线| 欧美在线视频你懂得| 激情伊人五月天久久综合| 中文字幕欧美日韩一区| 欧美性videosxxxxx| 色哟哟精品一区| 日本不卡视频一二三区| 国产精品视频九色porn| 欧美综合天天夜夜久久| 国产美女精品一区二区三区| 亚洲精品国产一区二区精华液| 精品国产一区二区三区忘忧草| 不卡一区二区三区四区| 日本一不卡视频| 国产精品高潮久久久久无| 日韩一区二区免费在线电影| 97se亚洲国产综合自在线| 美女免费视频一区| 一区二区在线观看av| 精品国产乱码久久久久久浪潮 | 欧美久久一二区| www.99精品| 极品瑜伽女神91| 亚洲电影视频在线| 中文字幕一区视频| 欧美xxxx老人做受| 色婷婷综合久久久| 国产精品自拍在线| 日本欧美加勒比视频| 亚洲精品美国一| 国产精品素人视频| 日韩精品中文字幕一区| 欧美中文字幕一区| 99久久久无码国产精品| 国产在线观看一区二区| 亚洲444eee在线观看| 最新国产成人在线观看| 久久精品视频网| 精品少妇一区二区三区| 欧美三电影在线| 成人sese在线| 国产一区二区精品久久91| 奇米四色…亚洲| 亚洲3atv精品一区二区三区| 亚洲美女一区二区三区| 国产欧美日韩中文久久| 欧美不卡一区二区三区| 91精品福利在线一区二区三区| 欧美在线视频不卡| 色婷婷av一区二区三区gif| 懂色av中文字幕一区二区三区| 久久se这里有精品| 免费成人在线视频观看| 日本不卡视频在线| 秋霞午夜av一区二区三区| 五月综合激情日本mⅴ|