xfb loop copy finished

This commit is contained in:
2026-05-13 17:46:37 +02:00
parent 9c3a6789f6
commit d057a31269
6 changed files with 257 additions and 38 deletions
+32 -4
View File
@@ -28,8 +28,27 @@ ircolib::u32 broadway::fetch(mem &mem) {
return val;
}
void broadway::decode_special(ircolib::u32 instr, mem &mem) {
switch (utils::secondary(instr)) {
case 0x153:
mfspr(instr);
break;
case 0x1D3:
mtspr(instr);
break;
case 0x10A:
add(instr);
break;
default:
ircolib::panic("broadway unknown special 0x{:04X}", utils::secondary(instr));
}
}
void broadway::execute(ircolib::u32 instr, mem &mem) {
switch (utils::primary(instr)) {
case 11: // cmpi crfD, L, rA, simm
cmpi(instr);
break;
case 14: // addi rd, ra, simm
addi(instr);
break;
@@ -42,15 +61,24 @@ void broadway::execute(ircolib::u32 instr, mem &mem) {
case 18: // bx target
bx(instr);
break;
case 19:
bclrx(instr);
break;
case 21:
rlwinm(instr);
break;
case 24: // ori ra, rs, uimm
ori(instr);
break;
case 31: // mfspr rd, spr
move_spr(instr);
case 31:
decode_special(instr, mem);
break;
case 32: // mfspr rd, spr
case 32: // lwz rd, d(ra)
lwz(instr, mem);
break;
case 33: // lwz rd, d(ra)
lwzu(instr, mem);
break;
case 36: // stw rs, d(ra)
stw(instr, mem);
break;
@@ -80,7 +108,7 @@ void broadway::print_disasm(ircolib::u32 instr) {
size_t j;
for (j = 0; j < count; j++) {
printf("0x%" PRIx64 ":\t%s\t\t%s\n", insn[j].address, insn[j].mnemonic, insn[j].op_str);
std::println("\t0x{:x}:\t{}\t\t{}", insn[j].address, insn[j].mnemonic, insn[j].op_str);
}
cs_free(insn, count);