?? ppc_dec.c
字號:
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); /*if(gCPU.pc >= 0xfff80100 && gCPU.pc < 0xfffff000) 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 + -