⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppc_dec.c

📁 SkyEye是一个可以运行嵌入式操作系统的硬件仿真工具
💻 C
📖 第 1 页 / 共 2 页
字号:
}// main opcode 63static void ppc_opc_group_f2(){	if ((gCPU.msr & MSR_FP) == 0) {		ppc_exception(PPC_EXC_NO_FPU, 0 ,0);		return;	}	uint32 ext = PPC_OPC_EXT(gCPU.current_opc);	if (ext & 16) {		switch (ext & 0x1f) {		case 18: ppc_opc_fdivx(); return;		case 20: ppc_opc_fsubx(); return;		case 21: ppc_opc_faddx(); return;		case 22: ppc_opc_fsqrtx(); return;		case 23: ppc_opc_fselx(); return;		case 25: ppc_opc_fmulx(); return;		case 26: ppc_opc_frsqrtex(); return;		case 28: ppc_opc_fmsubx(); return;		case 29: ppc_opc_fmaddx(); return;		case 30: ppc_opc_fnmsubx(); return;		case 31: ppc_opc_fnmaddx(); return;		}	} else {		switch (ext) {		case 0: ppc_opc_fcmpu(); return;		case 12: ppc_opc_frspx(); return;		case 14: ppc_opc_fctiwx(); return;		case 15: ppc_opc_fctiwzx(); return;		//--		case 32: ppc_opc_fcmpo(); return;		case 38: ppc_opc_mtfsb1x(); return;		case 40: ppc_opc_fnegx(); return;		case 64: ppc_opc_mcrfs(); return;		case 70: ppc_opc_mtfsb0x(); return;		case 72: ppc_opc_fmrx(); return;		case 134: ppc_opc_mtfsfix(); return;		case 136: ppc_opc_fnabsx(); return;		case 264: ppc_opc_fabsx(); return;		case 583: ppc_opc_mffsx(); return;		case 711: ppc_opc_mtfsfx(); return;		}	}	ppc_opc_invalid();}ppc_opc_function ppc_opc_table_groupv[965];//ppc_opc_function * ppc_opc_table_groupv;static void ppc_opc_init_groupv(){	uint i;	for (i=0; i<(sizeof ppc_opc_table_groupv / sizeof ppc_opc_table_groupv[0]);i++) {		ppc_opc_table_groupv[i] = ppc_opc_invalid;	}	ppc_opc_table_groupv[0] = ppc_opc_vaddubm;	ppc_opc_table_groupv[1] = ppc_opc_vmaxub;	ppc_opc_table_groupv[2] = ppc_opc_vrlb;	ppc_opc_table_groupv[4] = ppc_opc_vmuloub;	ppc_opc_table_groupv[5] = ppc_opc_vaddfp;	ppc_opc_table_groupv[6] = ppc_opc_vmrghb;	ppc_opc_table_groupv[7] = ppc_opc_vpkuhum;	ppc_opc_table_groupv[32] = ppc_opc_vadduhm;	ppc_opc_table_groupv[33] = ppc_opc_vmaxuh;	ppc_opc_table_groupv[34] = ppc_opc_vrlh;	ppc_opc_table_groupv[36] = ppc_opc_vmulouh;	ppc_opc_table_groupv[37] = ppc_opc_vsubfp;	ppc_opc_table_groupv[38] = ppc_opc_vmrghh;	ppc_opc_table_groupv[39] = ppc_opc_vpkuwum;	ppc_opc_table_groupv[64] = ppc_opc_vadduwm;	ppc_opc_table_groupv[65] = ppc_opc_vmaxuw;	ppc_opc_table_groupv[66] = ppc_opc_vrlw;	ppc_opc_table_groupv[70] = ppc_opc_vmrghw;	ppc_opc_table_groupv[71] = ppc_opc_vpkuhus;	ppc_opc_table_groupv[103] = ppc_opc_vpkuwus;	ppc_opc_table_groupv[129] = ppc_opc_vmaxsb;	ppc_opc_table_groupv[130] = ppc_opc_vslb;	ppc_opc_table_groupv[132] = ppc_opc_vmulosb;	ppc_opc_table_groupv[133] = ppc_opc_vrefp;	ppc_opc_table_groupv[134] = ppc_opc_vmrglb;	ppc_opc_table_groupv[135] = ppc_opc_vpkshus;	ppc_opc_table_groupv[161] = ppc_opc_vmaxsh;	ppc_opc_table_groupv[162] = ppc_opc_vslh;	ppc_opc_table_groupv[164] = ppc_opc_vmulosh;	ppc_opc_table_groupv[165] = ppc_opc_vrsqrtefp;	ppc_opc_table_groupv[166] = ppc_opc_vmrglh;	ppc_opc_table_groupv[167] = ppc_opc_vpkswus;	ppc_opc_table_groupv[192] = ppc_opc_vaddcuw;	ppc_opc_table_groupv[193] = ppc_opc_vmaxsw;	ppc_opc_table_groupv[194] = ppc_opc_vslw;	ppc_opc_table_groupv[197] = ppc_opc_vexptefp;	ppc_opc_table_groupv[198] = ppc_opc_vmrglw;	ppc_opc_table_groupv[199] = ppc_opc_vpkshss;	ppc_opc_table_groupv[226] = ppc_opc_vsl;	ppc_opc_table_groupv[229] = ppc_opc_vlogefp;	ppc_opc_table_groupv[231] = ppc_opc_vpkswss;	ppc_opc_table_groupv[256] = ppc_opc_vaddubs;	ppc_opc_table_groupv[257] = ppc_opc_vminub;	ppc_opc_table_groupv[258] = ppc_opc_vsrb;	ppc_opc_table_groupv[260] = ppc_opc_vmuleub;	ppc_opc_table_groupv[261] = ppc_opc_vrfin;	ppc_opc_table_groupv[262] = ppc_opc_vspltb;	ppc_opc_table_groupv[263] = ppc_opc_vupkhsb;	ppc_opc_table_groupv[288] = ppc_opc_vadduhs;	ppc_opc_table_groupv[289] = ppc_opc_vminuh;	ppc_opc_table_groupv[290] = ppc_opc_vsrh;	ppc_opc_table_groupv[292] = ppc_opc_vmuleuh;	ppc_opc_table_groupv[293] = ppc_opc_vrfiz;	ppc_opc_table_groupv[294] = ppc_opc_vsplth;	ppc_opc_table_groupv[295] = ppc_opc_vupkhsh;	ppc_opc_table_groupv[320] = ppc_opc_vadduws;	ppc_opc_table_groupv[321] = ppc_opc_vminuw;	ppc_opc_table_groupv[322] = ppc_opc_vsrw;	ppc_opc_table_groupv[325] = ppc_opc_vrfip;	ppc_opc_table_groupv[326] = ppc_opc_vspltw;	ppc_opc_table_groupv[327] = ppc_opc_vupklsb;	ppc_opc_table_groupv[354] = ppc_opc_vsr;	ppc_opc_table_groupv[357] = ppc_opc_vrfim;	ppc_opc_table_groupv[359] = ppc_opc_vupklsh;	ppc_opc_table_groupv[384] = ppc_opc_vaddsbs;	ppc_opc_table_groupv[385] = ppc_opc_vminsb;	ppc_opc_table_groupv[386] = ppc_opc_vsrab;	ppc_opc_table_groupv[388] = ppc_opc_vmulesb;	ppc_opc_table_groupv[389] = ppc_opc_vcfux;	ppc_opc_table_groupv[390] = ppc_opc_vspltisb;	ppc_opc_table_groupv[391] = ppc_opc_vpkpx;	ppc_opc_table_groupv[416] = ppc_opc_vaddshs;	ppc_opc_table_groupv[417] = ppc_opc_vminsh;	ppc_opc_table_groupv[418] = ppc_opc_vsrah;	ppc_opc_table_groupv[420] = ppc_opc_vmulesh;	ppc_opc_table_groupv[421] = ppc_opc_vcfsx;	ppc_opc_table_groupv[422] = ppc_opc_vspltish;	ppc_opc_table_groupv[423] = ppc_opc_vupkhpx;	ppc_opc_table_groupv[448] = ppc_opc_vaddsws;	ppc_opc_table_groupv[449] = ppc_opc_vminsw;	ppc_opc_table_groupv[450] = ppc_opc_vsraw;	ppc_opc_table_groupv[453] = ppc_opc_vctuxs;	ppc_opc_table_groupv[454] = ppc_opc_vspltisw;	ppc_opc_table_groupv[485] = ppc_opc_vctsxs;	ppc_opc_table_groupv[487] = ppc_opc_vupklpx;	ppc_opc_table_groupv[512] = ppc_opc_vsububm;	ppc_opc_table_groupv[513] = ppc_opc_vavgub;	ppc_opc_table_groupv[514] = ppc_opc_vand;	ppc_opc_table_groupv[517] = ppc_opc_vmaxfp;	ppc_opc_table_groupv[518] = ppc_opc_vslo;	ppc_opc_table_groupv[544] = ppc_opc_vsubuhm;	ppc_opc_table_groupv[545] = ppc_opc_vavguh;	ppc_opc_table_groupv[546] = ppc_opc_vandc;	ppc_opc_table_groupv[549] = ppc_opc_vminfp;	ppc_opc_table_groupv[550] = ppc_opc_vsro;	ppc_opc_table_groupv[576] = ppc_opc_vsubuwm;	ppc_opc_table_groupv[577] = ppc_opc_vavguw;	ppc_opc_table_groupv[578] = ppc_opc_vor;	ppc_opc_table_groupv[610] = ppc_opc_vxor;	ppc_opc_table_groupv[641] = ppc_opc_vavgsb;	ppc_opc_table_groupv[642] = ppc_opc_vnor;	ppc_opc_table_groupv[673] = ppc_opc_vavgsh;	ppc_opc_table_groupv[704] = ppc_opc_vsubcuw;	ppc_opc_table_groupv[705] = ppc_opc_vavgsw;	ppc_opc_table_groupv[768] = ppc_opc_vsububs;	ppc_opc_table_groupv[770] = ppc_opc_mfvscr;	ppc_opc_table_groupv[772] = ppc_opc_vsum4ubs;	ppc_opc_table_groupv[800] = ppc_opc_vsubuhs;	ppc_opc_table_groupv[802] = ppc_opc_mtvscr;	ppc_opc_table_groupv[804] = ppc_opc_vsum4shs;	ppc_opc_table_groupv[832] = ppc_opc_vsubuws;	ppc_opc_table_groupv[836] = ppc_opc_vsum2sws;	ppc_opc_table_groupv[896] = ppc_opc_vsubsbs;	ppc_opc_table_groupv[900] = ppc_opc_vsum4sbs;	ppc_opc_table_groupv[928] = ppc_opc_vsubshs;	ppc_opc_table_groupv[960] = ppc_opc_vsubsws;	ppc_opc_table_groupv[964] = ppc_opc_vsumsws;}// main opcode 04static void ppc_opc_group_v(){	uint32 ext = PPC_OPC_EXT(gCPU.current_opc);#ifndef  __VEC_EXC_OFF__	if ((gCPU.msr & MSR_VEC) == 0) {		ppc_exception(PPC_EXC_NO_VEC,0 ,0);		return;	}#endif	switch(ext & 0x1f) {		case 16:			if (gCPU.current_opc & PPC_OPC_Rc)				return ppc_opc_vmhraddshs();			else				return ppc_opc_vmhaddshs();		case 17:	return ppc_opc_vmladduhm();		case 18:			if (gCPU.current_opc & PPC_OPC_Rc)				return ppc_opc_vmsummbm();			else				return ppc_opc_vmsumubm();		case 19:			if (gCPU.current_opc & PPC_OPC_Rc)				return ppc_opc_vmsumuhs();			else				return ppc_opc_vmsumuhm();		case 20:			if (gCPU.current_opc & PPC_OPC_Rc)				return ppc_opc_vmsumshs();			else				return ppc_opc_vmsumshm();		case 21:			if (gCPU.current_opc & PPC_OPC_Rc)				return ppc_opc_vperm();			else				return ppc_opc_vsel();		case 22:	return ppc_opc_vsldoi();		case 23:			if (gCPU.current_opc & PPC_OPC_Rc)				return ppc_opc_vnmsubfp();			else				return ppc_opc_vmaddfp();	}	switch(ext & 0x1ff)	{		case 3: return ppc_opc_vcmpequbx();		case 35: return ppc_opc_vcmpequhx();		case 67: return ppc_opc_vcmpequwx();		case 99: return ppc_opc_vcmpeqfpx();		case 227: return ppc_opc_vcmpgefpx();		case 259: return ppc_opc_vcmpgtubx();		case 291: return ppc_opc_vcmpgtuhx();		case 323: return ppc_opc_vcmpgtuwx();		case 355: return ppc_opc_vcmpgtfpx();		case 387: return ppc_opc_vcmpgtsbx();		case 419: return ppc_opc_vcmpgtshx();		case 451: return ppc_opc_vcmpgtswx();		case 483: return ppc_opc_vcmpbfpx();	}	if (ext >= (sizeof ppc_opc_table_groupv / sizeof ppc_opc_table_groupv[0])) {		return ppc_opc_invalid();	}	return ppc_opc_table_groupv[ext]();}static ppc_opc_function ppc_opc_table_main[64] = {	&ppc_opc_invalid,	//  0	&ppc_opc_invalid,	//  1	&ppc_opc_invalid,	//  2  (tdi on 64 bit platforms)	&ppc_opc_twi,		//  3	&ppc_opc_invalid,	//  4  (altivec group 1)	&ppc_opc_invalid,	//  5	&ppc_opc_invalid,	//  6	&ppc_opc_mulli,		//  7	&ppc_opc_subfic,	//  8	&ppc_opc_invalid,	//  9	&ppc_opc_cmpli,		// 10	&ppc_opc_cmpi,		// 11	&ppc_opc_addic,		// 12	&ppc_opc_addic_,	// 13	&ppc_opc_addi,		// 14	&ppc_opc_addis,		// 15	&ppc_opc_bcx,		// 16	&ppc_opc_sc,		// 17	&ppc_opc_bx,		// 18	&ppc_opc_group_1,	// 19	&ppc_opc_rlwimix,	// 20	&ppc_opc_rlwinmx,	// 21	&ppc_opc_invalid,	// 22	&ppc_opc_rlwnmx,	// 23	&ppc_opc_ori,		// 24	&ppc_opc_oris,		// 25	&ppc_opc_xori,		// 26	&ppc_opc_xoris,		// 27	&ppc_opc_andi_,		// 28	&ppc_opc_andis_,	// 29	&ppc_opc_invalid,	// 30  (group_rld on 64 bit platforms)	&ppc_opc_group_2,	// 31	&ppc_opc_lwz,		// 32	&ppc_opc_lwzu,		// 33	&ppc_opc_lbz,		// 34	&ppc_opc_lbzu,		// 35	&ppc_opc_stw,		// 36	&ppc_opc_stwu,		// 37	&ppc_opc_stb,		// 38	&ppc_opc_stbu,		// 39	&ppc_opc_lhz,		// 40	&ppc_opc_lhzu,		// 41	&ppc_opc_lha,		// 42	&ppc_opc_lhau,		// 43	&ppc_opc_sth,		// 44	&ppc_opc_sthu,		// 45	&ppc_opc_lmw,		// 46	&ppc_opc_stmw,		// 47	&ppc_opc_lfs,		// 48	&ppc_opc_lfsu,		// 49	&ppc_opc_lfd,		// 50	&ppc_opc_lfdu,		// 51	&ppc_opc_stfs,		// 52	&ppc_opc_stfsu,		// 53	&ppc_opc_stfd,		// 54	&ppc_opc_stfdu,		// 55	&ppc_opc_invalid,	// 56	&ppc_opc_invalid,	// 57	&ppc_opc_invalid,	// 58  (ld on 64 bit platforms)	&ppc_opc_group_f1,	// 59	&ppc_opc_invalid,	// 60	&ppc_opc_invalid,	// 61	&ppc_opc_invalid,	// 62	&ppc_opc_group_f2,	// 63};void FASTCALL ppc_exec_opc(){	uint32 mainopc = PPC_OPC_MAIN(gCPU.current_opc);//                        printf("DBG:before exec pc=0x%x,opc=0x%x,mainopc=0x%x\n", gCPU.pc, gCPU.current_opc,mainopc);	ppc_opc_table_main[mainopc]();}void ppc_dec_init(){	ppc_opc_init_group2();		if ((ppc_cpu_get_pvr(0) & 0xffff0000) == 0x000c0000) {		ppc_opc_table_main[4] = ppc_opc_group_v;		ppc_opc_init_groupv();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -