decode.c

来自「ppc750 system design simulator using sys」· C语言 代码 · 共 800 行 · 第 1/3 页

C
800
字号
	init_table63(22, 5, fsqrtx_impl, fsqrtx_bin2c, fsqrtx_disasm, fsqrtx_translate, fsqrtx_xml, "fsqrtx");*/		init_table63(20, 5, fsubx_impl, fsubx_bin2c, fsubx_disasm, fsubx_translate, fsubx_xml, "fsubx");	init_table31(28, 10, andx_impl, andx_bin2c, andx_disasm, andx_translate, andx_xml, "andx");	init_table31(60, 10, andcx_impl, andcx_bin2c, andcx_disasm, andcx_translate, andcx_xml, "andcx");	init_table31(0, 10, cmp_impl, cmp_bin2c, cmp_disasm, cmp_translate, cmp_xml, "cmp");	init_table31(32, 10, cmpl_impl, cmpl_bin2c, cmpl_disasm, cmpl_translate, cmpl_xml, "cmpl");	init_table31(26, 10, cntlzwx_impl, cntlzwx_bin2c, cntlzwx_disasm, cntlzwx_translate, cntlzwx_xml, "cntlzwx");/*		init_table31(758, 10, dcba_impl, dcba_bin2c, dcba_disasm, dcba_translate, dcba_xml, "dcba");	init_table31(86, 10, dcbf_impl, dcbf_bin2c, dcbf_disasm, dcbf_translate, dcbf_xml, "dcbf");	init_table31(470, 10, dcbi_impl, dcbi_bin2c, dcbi_disasm, dcbi_translate, dcbi_xml, "dcbi");	init_table31(54, 10, dcbst_impl, dcbst_bin2c, dcbst_disasm, dcbst_translate, dcbst_xml, "dcbst");	init_table31(278, 10, dcbt_impl, dcbt_bin2c, dcbt_disasm, dcbt_translate, dcbt_xml, "dcbt");	init_table31(246, 10, dcbtst_impl, dcbtst_bin2c, dcbtst_disasm, dcbtst_translate, dcbtst_xml, "dcbtst");*/	init_table31(1014, 10, dcbz_impl, dcbz_bin2c, dcbz_disasm, dcbz_translate, dcbz_xml, "dcbz");/*	init_table31(310, 10, eciwx_impl, eciwx_bin2c, eciwx_disasm, eciwx_translate, eciwx_xml, "eciwx");	init_table31(438, 10, ecowx_impl, ecowx_bin2c, ecowx_disasm, ecowx_translate, ecowx_xml, "ecowx");	init_table31(854, 10, eieio_impl, eieio_bin2c, eieio_disasm, eieio_translate, eieio_xml, "eieio");*/	init_table31(284, 10, eqvx_impl, eqvx_bin2c, eqvx_disasm, eqvx_translate, eqvx_xml, "eqvx");	init_table31(954, 10, extsbx_impl, extsbx_bin2c, extsbx_disasm, extsbx_translate, extsbx_xml, "extsbx");	init_table31(922, 10, extshx_impl, extshx_bin2c, extshx_disasm, extshx_translate, extshx_xml, "extshx");//	init_table31(982, 10, icbi_impl, icbi_bin2c, icbi_disasm, icbi_translate, icbi_xml, "icbi");	init_table31(119, 10, lbzux_impl, lbzux_bin2c, lbzux_disasm, lbzux_translate, lbzux_xml, "lbzux");	init_table31(87, 10, lbzx_impl, lbzx_bin2c, lbzx_disasm, lbzx_translate, lbzx_xml, "lbzx");	init_table31(631, 10, lfdux_impl, lfdux_bin2c, lfdux_disasm, lfdux_translate, lfdux_xml, "lfdux");	init_table31(599, 10, lfdx_impl, lfdx_bin2c, lfdx_disasm, lfdx_translate, lfdx_xml, "lfdx");	init_table31(567, 10, lfsux_impl, lfsux_bin2c, lfsux_disasm, lfsux_translate, lfsux_xml, "lfsux");	init_table31(535, 10, lfsx_impl, lfsx_bin2c, lfsx_disasm, lfsx_translate, lfsx_xml, "lfsx");	init_table31(375, 10, lhaux_impl, lhaux_bin2c, lhaux_disasm, lhaux_translate, lhaux_xml, "lhaux");	init_table31(343, 10, lhax_impl, lhax_bin2c, lhax_disasm, lhax_translate, lhax_xml, "lhax");	init_table31(790, 10, lhbrx_impl, lhbrx_bin2c, lhbrx_disasm, lhbrx_translate, lhbrx_xml, "lhbrx");	init_table31(311, 10, lhzux_impl, lhzux_bin2c, lhzux_disasm, lhzux_translate, lhzux_xml, "lhzux");	init_table31(279, 10, lhzx_impl, lhzx_bin2c, lhzx_disasm, lhzx_translate, lhzx_xml, "lhzx");/*	init_table31(597, 10, lswi_impl, lswi_bin2c, lswi_disasm, lswi_translate, lswi_xml, "lswi");	init_table31(533, 10, lswx_impl, lwsx_bin2c, lswx_disasm, lswx_translate, lswx_xml, "lswx");	init_table31(20, 10, lwarx_impl, lwarx_bin2c, lwarx_disasm, lwarx_translate, lwarx_xml, "lwarx");*/	init_table31(534, 10, lwbrx_impl, lwbrx_bin2c, lwbrx_disasm, lwbrx_translate, lwbrx_xml, "lwbrx");	init_table31(55, 10, lwzux_impl, lwzux_bin2c, lwzux_disasm, lwzux_translate, lwzux_xml, "lwzux");	init_table31(23, 10, lwzx_impl, lwzx_bin2c, lwzx_disasm, lwzx_translate, lwzx_xml, "lwzx");//	init_table31(512, 10, mcrxr_impl, mcrxr_bin2c, mcrxr_disasm, mcrxr_translate, mcrxr_xml, "mcrxr");	init_table31(19, 10, mfcr_impl, mfcr_bin2c, mfcr_disasm, mfcr_translate, mfcr_xml, "mfcr");/*	init_table31(83, 10, mfmsr_impl, mfmsr_bin2c, mfmsr_disasm, mfmsr_translate, mfmsr_xml, "mfmsr");	init_table31(595, 10, mfsr_impl, mfsr_bin2c, mfsr_disasm, mfsr_translate, mfsr_xml, "mfsr");	init_table31(659, 10, mfsrin_impl, mfsrin_bin2c, mfsrin_disasm, mfsrin_translate, mfsrin_xml, "mfsrin");	init_table31(146, 10, mtmsr_impl, mtmsr_bin2c, mtmsr_disasm, mtmsr_translate, mtmsr_xml, "mtmsr");	init_table31(210, 10, mtsr_impl, mtsr_bin2c, mtsr_disasm, mtsr_translate, mtsr_xml, "mtsr");	init_table31(242, 10, mtsrin_impl, mtsrin_bin2c, mtsrin_disasm, mtsrin_translate, mtsrin_xml, "mtsrin");*/	init_table31(476, 10, nandx_impl, nandx_bin2c, nandx_disasm, nandx_translate, nandx_xml, "nandx");	init_table31(124, 10, norx_impl, norx_bin2c, norx_disasm, norx_translate, norx_xml, "norx");	init_table31(444, 10, orx_impl, orx_bin2c, orx_disasm, orx_translate, orx_xml, "orx");	init_table31(412, 10, orcx_impl, orcx_bin2c, orcx_disasm, orcx_translate, orcx_xml, "orcx");	init_table31(24, 10, slwx_impl, slwx_bin2c, slwx_disasm, slwx_translate, slwx_xml, "slwx");	init_table31(792, 10, srawx_impl, srawx_bin2c, srawx_disasm, srawx_translate, srawx_xml, "srawx");	init_table31(824, 10, srawix_impl, srawix_bin2c, srawix_disasm, srawix_translate, srawix_xml, "srawix");	init_table31(536, 10, srwx_impl, srwx_bin2c, srwx_disasm, srwx_translate, srawx_xml, "srawx");	init_table31(247, 10, stbux_impl, stbux_bin2c, stbux_disasm, stbux_translate, stbux_xml, "stbux");	init_table31(215, 10, stbx_impl, stbx_bin2c, stbx_disasm, stbx_translate, stbx_xml, "stbx");	init_table31(759, 10, stfdux_impl, stfdux_bin2c, stfdux_disasm, stfdux_translate, stfdux_xml, "stfdux");	init_table31(727, 10, stfdx_impl, stfdx_bin2c, stfdx_disasm, stfdx_translate, stfdx_xml, "stfdx");/*	init_table31(983, 10, stfiwx_impl, stfiwx_bin2c, stfiwx_disasm, stfiwx_translate, stfiwx_xml, "stfiwx");*/		init_table31(695, 10, stfsux_impl, stfsux_bin2c, stfsux_disasm, stfsux_translate, stfsux_xml, "stfsux");	init_table31(663, 10, stfsx_impl, stfsx_bin2c, stfsx_disasm, stfsx_translate, stfsx_xml, "stfsx");	init_table31(918, 10, sthbrx_impl, sthbrx_bin2c, sthbrx_disasm, sthbrx_translate, sthbrx_xml, "sthbrx");	init_table31(439, 10, sthux_impl, sthux_bin2c, sthux_disasm, sthux_translate, sthux_xml, "sthux");	init_table31(407, 10, sthx_impl, sthx_bin2c, sthx_disasm, sthx_translate, sthx_xml, "sthx");/*		init_table31(725, 10, stswi_impl, stswi_bin2c, stswi_disasm, stswi_translate, stswi_xml, "stswi");	init_table31(661, 10, stswx_impl, stswx_bin2c, stswx_disasm, stswx_translate, stswx_xml, "stswx");*/	init_table31(662, 10, stwbrx_impl, stwbrx_bin2c, stwbrx_disasm, stwbrx_translate, stwbrx_xml, "stwbrx");//	init_table31(150, 10, stwcxd_impl, stwcxd_bin2c, stwcxd_disasm, stwcxd_xml, stwcxd_translate);	init_table31(183, 10, stwux_impl, stwux_bin2c, stwux_disasm, stwux_translate, stwux_xml, "stwux");	init_table31(151, 10, stwx_impl, stwx_bin2c, stwx_disasm, stwx_translate, stwx_xml, "stwx");/*	init_table31(598, 10, sync_impl, sync_bin2c, sync_disasm, sync_translate, sync_xml, "sync");	init_table31(370, 10, tlbia_impl, tlbia_bin2c, tlbia_disasm, tlbia_translate, tlbia_xml, "tlbia");	init_table31(306, 10, tlbie_impl, tlbie_bin2c, tlbie_disasm, tlbie_translate, tlbie_xml, "tlbie");	init_table31(566, 10, tlbsync_impl, tlbsync_bin2c, tlbsync_disasm, tlbsync_translate, tlbsync_xml, "tlbsync");	init_table31(4, 10, tw_impl, tw_bin2c, tw_disasm, tw_translate, tw_xml, "tw");*/	init_table31(316, 10, xorx_impl, xorx_bin2c, xorx_disasm, xorx_translate, xorx_xml, "xorx");	init_table31(339, 10, mfspr_impl, mfspr_bin2c, mfspr_disasm, mfspr_translate, mfspr_xml, "mfspr");	init_table31(371, 10, mftb_impl, mftb_bin2c, mftb_disasm, mftb_translate, mftb_xml, "mftb");	init_table31(144, 10, mtcrf_impl, mtcrf_bin2c, mtcrf_disasm, mtcrf_translate, mtcrf_xml, "mtcrf");	init_table31(467, 10, mtspr_impl, mtspr_bin2c, mtspr_disasm, mtspr_translate, mtspr_xml, "mtspr");				init_table31(266, 9, addx_impl, addx_bin2c, addx_disasm, addx_translate, addx_xml, "addx");	init_table31(10, 9, addcx_impl, addcx_bin2c, addcx_disasm, addcx_translate, addcx_xml, "addcx");	init_table31(138, 9, addex_impl, addex_bin2c, addex_disasm, addex_translate, addex_xml, "addex");	init_table31(234, 9, addmex_impl, addmex_bin2c, addmex_disasm, addmex_translate, addmex_xml, "addmex");	init_table31(202, 9, addzex_impl, addzex_bin2c, addzex_disasm, addzex_translate, addzex_xml, "addzex");	init_table31(491, 9, divwx_impl, divwx_bin2c, divwx_disasm, divwx_translate, divwx_xml, "divwx");	init_table31(459, 9, divwux_impl, divwux_bin2c, divwux_disasm, divwux_translate, divwux_xml, "divwux");	init_table31(75, 9, mulhwx_impl, mulhwx_bin2c, mulhwx_disasm, mulhwx_translate, mulhwx_xml, "mulhwx");	init_table31(11, 9, mulhwux_impl, mulhwux_bin2c, mulhwux_disasm, mulhwux_translate, mulhwux_xml, "mulhwux");	init_table31(235, 9, mullwx_impl, mullwx_bin2c, mullwx_disasm, mullwx_translate, mullwx_xml, "mullwx");	init_table31(104, 9, negx_impl, negx_bin2c, negx_disasm, negx_translate, negx_xml, "negx");	init_table31(40, 9, subfx_impl, subfx_bin2c, subfx_disasm, subfx_translate, subfx_xml, "subfx");	init_table31(8, 9, subfcx_impl, subfcx_bin2c, subfcx_disasm, subfcx_translate, subfcx_xml, "subfcx");	init_table31(136, 9, subfex_impl, subfex_bin2c, subfex_disasm, subfex_translate, subfex_xml, "subfex");	init_table31(232, 9, subfmex_impl, subfmex_bin2c, subfmex_disasm, subfmex_translate, subfmex_xml, "subfmex");	init_table31(200, 9, subfzex_impl, subfzex_bin2c, subfzex_disasm, subfzex_translate, subfzex_xml, "subfzex");		init_table19(528, bcctrx_impl, bcctrx_bin2c, bcctrx_disasm, bcctrx_translate, bcctrx_xml, "bcctrx");	init_table19(16, bclrx_impl, bclrx_bin2c, bclrx_disasm, bclrx_translate, bclrx_xml, "bclrx");	init_table19(257, crand_impl, crand_bin2c, crand_disasm, crand_translate, crand_xml, "crand");	init_table19(129, crandc_impl, crandc_bin2c, crandc_disasm, crandc_translate, crandc_xml, "crandc");	init_table19(289, creqv_impl, creqv_bin2c, creqv_disasm, creqv_translate, creqv_xml, "creqv");	init_table19(225, crnand_impl, crnand_bin2c, crnand_disasm, crnand_translate, crnand_xml, "crnand");	init_table19(33, crnor_impl, crnor_bin2c, crnor_disasm, crnor_translate, crnor_xml, "crnor");	init_table19(449, cror_impl, cror_bin2c, cror_disasm, cror_translate, cror_xml, "cror");	init_table19(417, crorc_impl, crorc_bin2c, crorc_disasm, crorc_translate, crorc_xml, "crorc");	init_table19(193, crxor_impl, crxor_bin2c, crxor_disasm, crxor_translate, crxor_xml, "crxor");/*		init_table19(150, isync_impl, isync_bin2c, isync_disasm, isync_translate, isync_xml, "isync");*/	init_table19(0, mcrf_impl, mcrf_bin2c, mcrf_disasm, mcrf_translate, mcrf_xml, "mcrf");/*	init_table19(50, rfi_impl, rfi_bin2c, rfi_disasm, rfi_translate, rfi_xml, "rfi");	init_table19(18, rfid_impl, rfid_bin2c, rfid_disasm, rfid_translate, rfid_xml, "rfid");	*/}void dump_int64(UInt64 value){	char buffer[32];	char *p = buffer + sizeof(buffer) - 1;		*p = 0;	if(value > 0)	{		do		{			*--p = '0' + (value % 10);			value = value / 10;		} while(value > 0);	}	else	{		*--p = '0';	}	fputs(p, stdout);}void dump_int64_smart(UInt64 value){	if(value > 1000000000)	{		dump_int64(value / 1000000000);		fputs(" G", stdout);		return;	}	if(value > 1000000)	{		dump_int64(value / 1000000);		fputs(" M", stdout);		return;	}	if(value > 1000)	{		dump_int64(value / 1000);		fputs(" K", stdout);		return;	}	dump_int64(value);	}void ppc_dump_instruction_counters(){	int i;		for(i = 0; i < ninstructions; i++)	{		if(counters[i] > 0 && mnemonic_table[i])		{			printf("%s : ", mnemonic_table[i]);			if(counters[i] < 1000)			{				dump_int64(counters[i]);			}			else			{				dump_int64_smart(counters[i]);				fputs(" (", stdout);				dump_int64(counters[i]);				fputs(")", stdout);			}			fputs("\n", stdout);		}	}	fputs("Total : ", stdout);	if(instruction_counter < 1000)	{		dump_int64(instruction_counter);	}	else	{		dump_int64_smart(instruction_counter);		fputs(" (", stdout);		dump_int64(instruction_counter);		fputs(")", stdout);	}	fputs("\n", stdout);}BOOL ppc_is_a_branch(ppc_inst_t inst){	return OPCD == 16 || OPCD == 18 || (OPCD == 19 && (XO_10 == 528 || XO_10 == 16));}BOOL ppc_is_conditional_branch(ppc_inst_t inst){	return OPCD == 16;}BOOL ppc_is_unconditional_branch(ppc_inst_t inst){	return OPCD == 18;}addr_t ppc_get_unconditional_branch_target_addr(ppc_inst_t inst, addr_t pc){	UInt32 offset = inst & 0x03fffffc;	if(offset & 0x02000000) offset |= 0xfc000000;	if(inst & 2)	{		return offset;	}	else	{		return pc + offset;	}}addr_t ppc_get_conditional_branch_target_addr(ppc_inst_t inst, addr_t pc){	UInt32 offset = inst & 0xfffc;	if(offset & 32768) offset |= 0xffff0000; /* extension de signe sur 32 bits */		if(inst & 2)	{		return offset;	}	else	{		return pc + offset;	}}

⌨️ 快捷键说明

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