git subrepo pull --force deps/lightrec
[pcsx_rearmed.git] / deps / lightrec / interpreter.c
index 80a07f3..37264d3 100644 (file)
@@ -74,7 +74,7 @@ static inline u32 jump_skip(struct interpreter *inter)
 
 static inline u32 jump_next(struct interpreter *inter)
 {
-       inter->cycles += lightrec_cycles_of_opcode(inter->op->c);
+       inter->cycles += lightrec_cycles_of_opcode(inter->state, inter->op->c);
 
        if (unlikely(inter->delay_slot))
                return 0;
@@ -84,7 +84,7 @@ static inline u32 jump_next(struct interpreter *inter)
 
 static inline u32 jump_after_branch(struct interpreter *inter)
 {
-       inter->cycles += lightrec_cycles_of_opcode(inter->op->c);
+       inter->cycles += lightrec_cycles_of_opcode(inter->state, inter->op->c);
 
        if (unlikely(inter->delay_slot))
                return 0;
@@ -100,11 +100,11 @@ static void update_cycles_before_branch(struct interpreter *inter)
        u32 cycles;
 
        if (!inter->delay_slot) {
-               cycles = lightrec_cycles_of_opcode(inter->op->c);
+               cycles = lightrec_cycles_of_opcode(inter->state, inter->op->c);
 
                if (!op_flag_no_ds(inter->op->flags) &&
                    has_delay_slot(inter->op->c))
-                       cycles += lightrec_cycles_of_opcode(next_op(inter)->c);
+                       cycles += lightrec_cycles_of_opcode(inter->state, next_op(inter)->c);
 
                inter->cycles += cycles;
                inter->state->current_cycle += inter->cycles;
@@ -155,7 +155,7 @@ static u32 int_delay_slot(struct interpreter *inter, u32 pc, bool branch)
        bool run_first_op = false, dummy_ld = false, save_rs = false,
             load_in_ds, branch_in_ds = false, branch_at_addr = false,
             branch_taken;
-       u32 old_rs, new_rs, new_rt;
+       u32 old_rs, new_rt, new_rs = 0;
        u32 next_pc, ds_next_pc;
        u32 cause, epc;
 
@@ -236,7 +236,7 @@ static u32 int_delay_slot(struct interpreter *inter, u32 pc, bool branch)
                        branch_taken = is_branch_taken(reg_cache, op_next);
                        pr_debug("Target of impossible branch is a branch, "
                                 "%staken.\n", branch_taken ? "" : "not ");
-                       inter->cycles += lightrec_cycles_of_opcode(op_next);
+                       inter->cycles += lightrec_cycles_of_opcode(inter->state, op_next);
                        old_rs = reg_cache[op_next.r.rs];
                } else {
                        new_op.c = op_next;
@@ -252,7 +252,7 @@ static u32 int_delay_slot(struct interpreter *inter, u32 pc, bool branch)
                                reg_cache[op->r.rs] = old_rs;
                        }
 
-                       inter->cycles += lightrec_cycles_of_opcode(op_next);
+                       inter->cycles += lightrec_cycles_of_opcode(inter->state, op_next);
                }
        } else {
                next_pc = int_get_ds_pc(inter, 2);
@@ -293,7 +293,7 @@ static u32 int_delay_slot(struct interpreter *inter, u32 pc, bool branch)
        if (dummy_ld)
                reg_cache[op->r.rt] = new_rt;
 
-       inter->cycles += lightrec_cycles_of_opcode(op->c);
+       inter->cycles += lightrec_cycles_of_opcode(inter->state, op->c);
 
        if (branch_at_addr && branch_taken) {
                /* If the branch at the target of the branch opcode is taken,
@@ -306,7 +306,7 @@ static u32 int_delay_slot(struct interpreter *inter, u32 pc, bool branch)
                inter2.op = &new_op;
                inter2.block = NULL;
 
-               inter->cycles += lightrec_cycles_of_opcode(op_next);
+               inter->cycles += lightrec_cycles_of_opcode(inter->state, op_next);
 
                pr_debug("Running delay slot of branch at target of impossible "
                         "branch\n");
@@ -1191,7 +1191,7 @@ static u32 lightrec_emulate_block_list(struct lightrec_state *state,
        pc = lightrec_int_op(&inter);
 
        /* Add the cycles of the last branch */
-       inter.cycles += lightrec_cycles_of_opcode(inter.op->c);
+       inter.cycles += lightrec_cycles_of_opcode(inter.state, inter.op->c);
 
        state->current_cycle += inter.cycles;