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

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

?? intrin.c

?? window下的c編譯器。
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "c.h"
enum { EAX=0, ECX=1, EDX=2, EBX=3, ESI=6, EDI=7 };

typedef struct tagIntrinsics {
	char *Name;
	short NrOfArgs;
	short Flags;
	void (*fn)(Node p);
	Symbol (*argsFn)(Node p);
} INTRINSICS;
//static Symbol Arg0,Arg1;
static Node ArgumentsTab[10];
static int ArgumentsNts[10];
static int ArgumentsIndex;
static int labelIdx=1;
extern unsigned (*emitter)(Node, int);
extern Symbol intreg[];
static void fsincos(Node p)
{
	if (p->x.nestedCall) {
		print("\tfldl\t(%%esp)\n\tfsincos\n\taddl\t$8,%%esp\n\tpop\t%%eax\n");
		print("\tfstpl\t(%%eax");
	}
	else {
		print("\tfsincos\n\tfstpl\t(%%eax");
	}
	print(")\n");
}

static void bswap(Node p)	{	print("\tbswap\t%%eax\n");		}
static void carry(Node p)	{	print("\tsbb\t%%eax,%%eax\n");	}
static void bsf(Node p)		{	print("\tbsf\t%%eax,%%eax\n");	}
static void bsr(Node p)		{	print("\tbsr\t%%eax,%%eax\n");	}

static Symbol bswapArgs(Node p)
{
	return intreg[EAX];
}

static void fistp(Node p)
{
	print("\tpushl\t%%eax\n");
	print("\tfistps\t(%%esp)\n\tpopl\t%%eax\n");
}
static void fbld(Node p)
{
	print("\tfbld\t(%%eax)\n");
}
static void Fabs(Node p)	{	print("\tfabs\n");	}
static void fldpi(Node p)	{	print("\tfldpi\n");	}
static void fldl2e(Node p)	{	print("\tfldl2e\n");}
static void fldlg2(Node p)	{	print("\tfldlg2\n");}
static void fldln2(Node p)	{	print("\tfldln2\n");}
static void f2xm1(Node p)	{	print("\tf2xm1\n");	}
static void popNestedCall(Node p)
{
	if (p->x.nestedCall) {
		print("\tpopl\t%%eax\n\tpopl\t%%edx\n\tpopl\t%%ecx\n");
	}
}

static void mmxVectCallN(Node p,char *op,int negate)
{
	popNestedCall(p);
	print("\torl\t%%ecx,%%ecx\n\tje\t_$LM%d\n",labelIdx+1);
	if (negate) {
		print("\tpcmpeqb\t%%mm2,%%mm2\n");
	}
	print("_$LM%d:\n",labelIdx);
	print("\tdecl\t%%ecx\n");
	print("\tmovq\t(%%edx,%%ecx,8),%%mm0\n");
	if (op) {
		print("\t");
		outs(op);
		print("\t(%%eax,%%ecx,8),%%mm0\n");
		if (negate) {
			print("\tpxor\t%%mm2,%%mm0\n");
		}

	}
	print("\tmovq\t%%mm0,(%%eax,%%ecx,8)\n");
	print("\tjne\t_$LM%d\n",labelIdx);
	print("_$LM%d:\n",labelIdx+1);
	labelIdx += 2;
}
static void mmxVectCall(Node p,char *op)
{
	mmxVectCallN(p,op,0);
}
static void rdtsc(Node p)
{
	print("\trdtsc\n");
}

static void mmxImmCallN(Node p,char *op,int negate)
{
	popNestedCall(p);
	print("\torl\t%%ecx,%%ecx\n\tje\t_$LM%d\n",labelIdx+1);
	print("\tmovq\t(%%edx),%%mm1\n");
	if (negate) {
		print("\tpcmpeqb\t%%mm2,%%mm2\n");
	}
	print("_$LM%d:\n",labelIdx);
	print("\tdecl\t%%ecx\n");
	print("\tmovq\t%%mm1,%%mm0\n\t");
	outs(op);
	print("\t(%%eax,%%ecx,8),%%mm0\n");
	if (negate) {
		print("\tpxor\t%%mm2,%%mm0\n");
	}
	print("\tmovq\t%%mm0,(%%eax,%%ecx,8)\n");
	print("\tjne\t_$LM%d\n",labelIdx);
	print("_$LM%d:\n",labelIdx+1);
	labelIdx += 2;
}

static void mmxDotProd(Node p)
{
	popNestedCall(p);
	print("\tpxor\t%%mm7,%%mm7\n");
	print("_$LM%d:\n",labelIdx);
	print("\tmovq\t(%%eax),%%mm0\n");
	print("\tmovq\t(%%edx),%%mm1\n");
	print("\taddl\t$8,%%eax\n");
	print("\tpmaddwd\t%%mm1,%%mm0\n");
	print("\taddl\t$8,%%edx\n");
	print("\tpaddd\t%%mm0,%%mm7\n");
	print("\tdecl\t%%ecx\n");
	print("\tjne\t_$LM%d\n",labelIdx);
	labelIdx++;
	print("\tmovq\t%%mm7,%%mm0\n");
	print("\tpsrlq\t$32,%%mm7\n");
	print("\tpaddd\t%%mm7,%%mm0\n");
	print("\tmovd\t%%mm0,%%eax\n");
}

static void reduceCall(Node p,char *op,int negate)
{
	if (p->x.nestedCall) {
		if (op == NULL)
			print("\tpopl\t%%eax\n\tpopl\t%%ecx\n");
		else
			popNestedCall(p);
	}
	if (op) {
		print("\tmovq\t(%%edx),%%mm4\n");
	}
	print("\tmovl\t$0x01010101,%%edx\n\tpushl\t%%edx\n\tpushl\t%%edx\n");
	print("\tmovq\t(%%esp),%%mm1\n\txor\t%%edx,%%edx\n");
	print("\tmovb\t$0xFF,%%dl\n\tpushl\t%%edx\n\tpushl\t%%edx\n");
	print("\tmovq\t(%%esp),%%mm2\n\tpxor\t%%mm7,%%mm7\n\taddl\t$16,%%esp\n");
	print("\torl\t%%ecx,%%ecx\n\tje\t_$LM%d\n",labelIdx+1);
	if (negate) {
		print("\tpcmpeqb\t%%mm5,%%mm5\n");
	}
	print("_$LM%d:\n",labelIdx);
	print("\tdecl\t%%ecx\n");
	print("\tmovq\t(%%eax,%%ecx,8),%%mm0\n");
	if (op) {
		print("\t");
		outs(op);
		print("\t%%mm4,%%mm0\n");
	}
	if (negate) {
		print("\tpandn\t%%mm5,%%mm0\n");
	}
	print("\tpand\t%%mm1,%%mm0\n");
	print("\tmovq\t%%mm0,%%mm3\n");

	print("\tpsrlq\t$8,%%mm3\n");
	print("\tpaddb\t%%mm3,%%mm0\n");

	print("\tpsrlq\t$8,%%mm3\n");
	print("\tpaddb\t%%mm3,%%mm0\n");

	print("\tpsrlq\t$8,%%mm3\n");
	print("\tpaddb\t%%mm3,%%mm0\n");

	print("\tpand\t%%mm2,%%mm0\n");
	print("\tpaddd\t%%mm0,%%mm7\n");
	print("\tjne\t_$LM%d\n",labelIdx);
	print("_$LM%d:\n\tmovd\t%%mm7,%%eax\n",labelIdx+1);
	print("\tpsrlq\t$32,%%mm7\n\tmovd\t%%mm7,%%ecx\n\taddl\t%%ecx,%%eax\n");
	labelIdx += 2;
}

static void mmxImmCall(Node p,char *op)
{
	mmxImmCallN(p,op,0);
}

static Symbol paddArgs(Node p)
{
	Symbol r=NULL;

	FunctionInfo.mmxCalls = 1;
	switch (ArgumentsIndex) {
	case 0:
		if (p->x.nestedCall == 0) {
			r = intreg[ECX];
			p->kids[0]->syms[2] = r;
		}
		break;
	case 1:
		if (p->x.nestedCall == 0) {
			r = intreg[EDX];
			p->kids[0]->syms[2] = r;
		}
		break;
	case 2:
		if (p->x.nestedCall == 0) {
			r = intreg[EAX];
			p->kids[0]->syms[2] = r;
		}
		break;
	default:
		assert(0);
		break;
	}
	ArgumentsIndex++;
	if (p->x.nestedCall == 0)
		p->syms[2] = r;
	if (ArgumentsIndex == 3)
		ArgumentsIndex = 0;
	return r;
}

static void itobcd(Node p)
{
	if (p->x.nestedCall) {
		print("\tpopl\t%%edx\n");
		print("\tfildl\t(%%esp)\n\tfbstp\t(%%edx)\n\taddl\t$4,%%esp\n");
	}
	else {
		print("\tpushl\t%%ecx\n\tfildl\t(%%esp)\n");
		print("\tfbstp\t(%%edx)\n\taddl\t$4,%%esp\n");
	}
}

static Symbol itobcdArgs(Node p)
{
	Symbol r=NULL;

	switch (ArgumentsIndex) {
	case 0:
		if (p->x.nestedCall == 0) {
			r = intreg[ECX];
			p->kids[0]->syms[2] = r;
		}
		break;
	case 1:
		if (p->x.nestedCall == 0) {
			r = intreg[EDX];
			p->kids[0]->syms[2] = r;
		}
		break;
	}
	ArgumentsIndex++;
	if (p->x.nestedCall == 0)
		p->syms[2] = r;
	if (ArgumentsIndex == 2)
		ArgumentsIndex = 0;
	return r;
}
static Symbol reduceArgs(Node p)
{
	Symbol r=NULL;

	switch (ArgumentsIndex) {
	case 0:
		if (p->x.nestedCall == 0) {
			r = intreg[ECX];
			p->kids[0]->syms[2] = r;
		}
		break;
	case 1:
		if (p->x.nestedCall == 0) {
			r = intreg[EAX];
			p->kids[0]->syms[2] = r;
		}
		break;
	}
	ArgumentsIndex++;
	if (p->x.nestedCall == 0)
		p->syms[2] = r;
	if (ArgumentsIndex == 2)
		ArgumentsIndex = 0;
	return r;
}

#if 0
static Symbol memopArgs(Node p)
{
	Symbol r=NULL;
	Value v;

	FunctionInfo.memmove = 1;
	switch (ArgumentsIndex) {
	case 0:
		Arg0 = NULL;
		if (p->x.nestedCall == 0 ) {
			r = intreg[ECX];
			p->kids[0]->syms[2] = r;
			if (generic(p->kids[0]->op) == CNST) {
				Arg0 = p->kids[0]->syms[0];
				v.u = p->kids[0]->syms[0]->u.value/4;
				p->kids[0]->syms[0] = constant(inttype,v);
				ArgumentsTab[0] = p->kids[0];
			}
		}
		break;
	case 1:
		if (p->x.nestedCall == 0) {
			r = intreg[EAX];
			p->kids[0]->syms[2] = r;
		}
		if (generic(p->kids[0]->op) == CNST)
			Arg1 = p->kids[0]->syms[0];
		else {
			Arg1 = NULL;
			if (Arg0) {
				ArgumentsTab[0]->syms[0] = Arg0;
				Arg0 = NULL;
			}
		}
		break;
	case 2:
		if (p->x.nestedCall == 0) {
			if ((freemask[0] & (1 << EDI)) == 0)
				r = intreg[EDX];
			else
				r = intreg[EDI];
			p->kids[0]->syms[2] = r;
		}
		break;
	default:
		assert(0);
		break;
	}
	ArgumentsIndex++;
	if (p->x.nestedCall == 0)
		p->syms[2] = r;
	if (ArgumentsIndex == 3)
		ArgumentsIndex = 0;
	return r;
}
static void imemset(Node p)
{
	int qty;

	if (p->x.nestedCall) {
		print("\tpop\t%%edx\n\tpop\t%%eax\n\tpop\t%%ecx\n");
	}
	if ((freemask[0] & (1 << EDI)) == 0)
		print("\txchg\t%%edi,%%edx\n");
	if (Arg0 && Arg1 && Arg1->u.value == 0 && Arg1->name[0] == '0') {
		qty = Arg0->u.value;
		qty -= 4*(qty/4);
		print("\trep\n\tmovsl\n");
		if (qty > 0) {
			if (qty >= 2) {
				print("\tmovsw\n");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产麻豆免费人成网站| 欧美精品vⅰdeose4hd| 午夜精品久久久久久不卡8050| 国产欧美一区二区三区在线看蜜臀 | 喷白浆一区二区| 亚洲成av人在线观看| 亚洲成人免费av| 日韩av中文字幕一区二区| 三级一区在线视频先锋 | 久久99精品国产.久久久久久| 亚洲高清视频的网址| 亚洲最新视频在线观看| 亚洲国产色一区| 午夜av区久久| 久久精品99国产精品日本| 狠狠色狠狠色综合系列| 国产精品 日产精品 欧美精品| 国产精品自拍毛片| 国产盗摄精品一区二区三区在线| 国产成人h网站| 色嗨嗨av一区二区三区| 91精品免费观看| 国产女人水真多18毛片18精品视频| 久久久国产精品麻豆| 日韩久久一区二区| 午夜精品免费在线| 国产一区二区在线观看视频| 不卡一区二区三区四区| 欧美另类videos死尸| 久久影视一区二区| 亚洲激情av在线| 美脚の诱脚舐め脚责91| 99久久免费国产| 7777精品伊人久久久大香线蕉的 | 不卡视频在线观看| 欧美色区777第一页| 26uuu欧美| 亚洲国产日韩一级| 国产成人综合在线观看| 在线欧美日韩精品| 久久精品亚洲麻豆av一区二区| 国产女人18水真多18精品一级做| 亚洲综合色自拍一区| 国产精品18久久久久| 精品视频在线免费观看| 国产精品色噜噜| 日本不卡中文字幕| 色婷婷亚洲综合| 国产校园另类小说区| 日本不卡一区二区三区| 色综合亚洲欧洲| 欧美经典三级视频一区二区三区| 污片在线观看一区二区| 91丝袜美腿高跟国产极品老师 | 樱花草国产18久久久久| 国产乱子轮精品视频| 欧美日韩在线播放| 国产精品久久久一本精品| 激情综合色综合久久| 欧美日韩国产不卡| 亚洲黄一区二区三区| www.av亚洲| 久久精品亚洲精品国产欧美kt∨| 日日摸夜夜添夜夜添精品视频| 不卡电影免费在线播放一区| 久久综合中文字幕| 久久疯狂做爰流白浆xx| 欧美日韩免费一区二区三区视频| 一区二区中文字幕在线| 懂色av一区二区夜夜嗨| 久久―日本道色综合久久| 蜜臂av日日欢夜夜爽一区| 欧美日韩久久久| 亚洲国产va精品久久久不卡综合| 91原创在线视频| 成人欧美一区二区三区黑人麻豆| 国产成人免费9x9x人网站视频| 精品国产伦一区二区三区观看体验 | 宅男在线国产精品| 国内一区二区视频| 精品国产三级a在线观看| 免费xxxx性欧美18vr| 日韩一级高清毛片| 国产一区在线视频| 国产精品嫩草99a| 91视频精品在这里| 亚洲五月六月丁香激情| 欧美丰满少妇xxxbbb| 男男成人高潮片免费网站| 欧美一区二区高清| 国产一区美女在线| 国产精品乱人伦中文| eeuss影院一区二区三区| 亚洲欧美成aⅴ人在线观看 | 欧美美女一区二区三区| 天堂久久一区二区三区| 日韩美一区二区三区| 国产一区二区三区免费播放| 亚洲国产精品成人综合 | 亚洲成人黄色小说| 日韩精品一区二区在线| 国产精品一区二区三区网站| 国产精品女主播av| 欧美羞羞免费网站| 久久国内精品自在自线400部| 久久精品亚洲精品国产欧美| 色综合色狠狠天天综合色| 舔着乳尖日韩一区| 欧美国产成人精品| 欧美日韩精品福利| 丰满少妇久久久久久久| 亚洲成人手机在线| 久久影院午夜论| 欧美三级电影网| 国产宾馆实践打屁股91| 亚洲一区av在线| 欧美激情在线一区二区| 欧美日韩一区二区三区在线| 国产91精品一区二区麻豆亚洲| 亚洲自拍都市欧美小说| 2021中文字幕一区亚洲| 欧美日韩一区二区电影| av一区二区三区四区| 久久99国内精品| 亚洲国产视频a| 中文字幕日韩一区| 久久亚洲一级片| 欧美肥妇bbw| 日本道色综合久久| 成人激情图片网| 国产精品18久久久久久vr| 日日摸夜夜添夜夜添精品视频| 亚洲色图清纯唯美| 国产三级欧美三级日产三级99| 91精品国产欧美一区二区18| 色悠久久久久综合欧美99| 国产成人无遮挡在线视频| 日本亚洲天堂网| 天天色综合天天| 亚洲成人在线观看视频| 怡红院av一区二区三区| 亚洲美女偷拍久久| 欧美国产成人在线| 亚洲成人第一页| 国产精品福利影院| 亚洲国产成人一区二区三区| 精品久久久久久久人人人人传媒| 欧美日韩一区二区电影| 欧美性猛交xxxxxx富婆| 在线观看中文字幕不卡| 91丨九色丨蝌蚪富婆spa| av不卡免费电影| jlzzjlzz亚洲日本少妇| 91一区二区在线| 99久久综合色| 色综合咪咪久久| 在线亚洲高清视频| 精品视频一区二区不卡| 欧美精品免费视频| 日韩欧美成人激情| 精品国产免费久久| 日本一区二区免费在线观看视频| 国产亚洲福利社区一区| 亚洲国产成人在线| 亚洲欧美aⅴ...| 亚洲高清一区二区三区| 日韩国产精品久久久| 免费不卡在线观看| 国产福利一区在线| 成人av电影在线网| 欧美午夜精品一区| 日韩精品一区二| 国产精品久久福利| 伊人夜夜躁av伊人久久| 午夜av电影一区| 精品夜夜嗨av一区二区三区| 国产成人av电影在线观看| 99九九99九九九视频精品| 精品视频123区在线观看| 日韩午夜中文字幕| 日本一区二区三区在线观看| 一区二区三区资源| 美女mm1313爽爽久久久蜜臀| 成人精品视频网站| 欧美三级电影一区| 国产亚洲一区二区三区四区| 亚洲最大成人综合| 久久99精品久久久久| 91美女精品福利| 精品久久久久久久久久久久久久久 | 欧洲人成人精品| 久久综合久久久久88| 一区二区三区影院| 国产在线播精品第三| 在线观看日韩av先锋影音电影院| 日韩免费在线观看| 亚洲午夜av在线| 99在线精品免费| 精品久久久久一区| 日韩中文字幕区一区有砖一区 |