X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=deps%2Flightrec%2Femitter.c;fp=deps%2Flightrec%2Femitter.c;h=02510f0e075d7009a8dc1fd9d9053181a4f1709c;hb=0e720fb13f7933930608b62854ea8f4a9d97c934;hp=1b4082b7075076f9b134aeaeabf72e80b424e94a;hpb=b85b72a36d0a623921ddd859527b6721ff911ad7;p=pcsx_rearmed.git diff --git a/deps/lightrec/emitter.c b/deps/lightrec/emitter.c index 1b4082b7..02510f0e 100644 --- a/deps/lightrec/emitter.c +++ b/deps/lightrec/emitter.c @@ -124,6 +124,8 @@ static void lightrec_emit_end_of_block(struct lightrec_cstate *state, } else { lightrec_jump_to_eob(state, _jit); } + + lightrec_regcache_reset(reg_cache); } void lightrec_emit_jump_to_interpreter(struct lightrec_cstate *state, @@ -138,6 +140,11 @@ void lightrec_emit_jump_to_interpreter(struct lightrec_cstate *state, * PC (which might have an offset) in JIT_V0. */ lightrec_load_imm(reg_cache, _jit, JIT_V0, block->pc, block->pc + (offset << 2)); + if (lightrec_store_next_pc()) { + jit_stxi_i(offsetof(struct lightrec_state, next_pc), + LIGHTREC_REG_STATE, JIT_V0); + } + jit_movi(JIT_V1, (uintptr_t)block); jit_subi(LIGHTREC_REG_CYCLE, LIGHTREC_REG_CYCLE, state->cycles); @@ -154,6 +161,11 @@ static void lightrec_emit_eob(struct lightrec_cstate *state, lightrec_load_imm(reg_cache, _jit, JIT_V0, block->pc, block->pc + (offset << 2)); + if (lightrec_store_next_pc()) { + jit_stxi_i(offsetof(struct lightrec_state, next_pc), + LIGHTREC_REG_STATE, JIT_V0); + } + jit_subi(LIGHTREC_REG_CYCLE, LIGHTREC_REG_CYCLE, state->cycles); lightrec_jump_to_eob(state, _jit); @@ -1214,6 +1226,7 @@ static void rec_store_memory(struct lightrec_cstate *cstate, if (add_imm) { jit_addi(tmp, addr_reg, (s16)c.i.imm); + lightrec_free_reg(reg_cache, rs); addr_reg = tmp; imm = 0; } else if (simm) {