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 + -
显示快捷键?