diff --git a/src/backend/core/JIT.cpp b/src/backend/core/JIT.cpp index 64760ce0..74946b01 100644 --- a/src/backend/core/JIT.cpp +++ b/src/backend/core/JIT.cpp @@ -37,7 +37,7 @@ Fn JIT::Recompile() { //prologue(); //mov(rbp, u64(this)); //mov(rdi, u64(this) + THIS_OFFSET(regs)); - u64 pc = regs.pc + 0x3D0; + u64 pc = regs.pc; while(old_stable) { old_stable = stable; diff --git a/src/backend/core/JIT/IR.cpp b/src/backend/core/JIT/IR.cpp index 6ec205b9..1b49206d 100644 --- a/src/backend/core/JIT/IR.cpp +++ b/src/backend/core/JIT/IR.cpp @@ -75,7 +75,12 @@ template <> struct fmt::formatter : formatter { } if (e.bOffs.index_or_imm.has_value()) { - std::string dst = fmt::format("0x{:0X}", e.bOffs.index_or_imm.value()); + std::string dst; + if (e.bOffs.isReg()) { + dst = fmt::format("R{}", e.bOffs.index_or_imm.value()); + } else if (e.bOffs.isImm()) { + dst = fmt::format("0x{:0X}", e.bOffs.index_or_imm.value()); + } op += dst; put_comma = true; } diff --git a/src/backend/core/JIT/instructions.cpp b/src/backend/core/JIT/instructions.cpp index 96c93f80..dacfadac 100644 --- a/src/backend/core/JIT/instructions.cpp +++ b/src/backend/core/JIT/instructions.cpp @@ -453,6 +453,7 @@ void JIT::j(u32 instr) { Entry or_(Entry::OR, dst, dst, op2); ir.push(or_); Entry e(Entry::BRANCH, or_.GetDst()); + ir.push(e); } void JIT::jal(u32 instr) { @@ -470,6 +471,7 @@ void JIT::jalr(u32 instr) { Entry::Operand{Entry::Operand::REG_S64, RD(instr)}, Entry::Operand{Entry::Operand::PC64}); ir.push(link); + j(instr); } void JIT::slti(u32 instr) { @@ -732,6 +734,7 @@ void JIT::dsra32(u32 instr) { void JIT::jr(u32 instr) { auto addr = Entry::Operand{Entry::Operand::REG_U64, RS(instr)}; Entry e(Entry::BRANCH, addr); + ir.push(e); } void JIT::dsub(u32 instr) {