ARM SVP drc revived

This commit is contained in:
kub 2020-03-02 19:40:07 +01:00
parent ea431e9ebb
commit d260165ad6

View file

@ -1438,12 +1438,9 @@ static int translate_op(unsigned int op, int *pc, int imm, int *end_cond, int *j
} }
tr_mov16(0, *pc); tr_mov16(0, *pc);
tr_r0_to_STACK(*pc); tr_r0_to_STACK(*pc);
if (tmpv != A_COND_AL) { if (tmpv != A_COND_AL)
u32 *real_ptr = tcache_ptr; EOP_C_B_PTR(jump_op, tr_neg_cond(tmpv), 0,
tcache_ptr = jump_op; tcache_ptr - jump_op - 2);
EOP_C_B(tr_neg_cond(tmpv),0,real_ptr - jump_op - 2);
tcache_ptr = real_ptr;
}
tr_mov16_cond(tmpv, 0, imm); tr_mov16_cond(tmpv, 0, imm);
if (tmpv != A_COND_AL) if (tmpv != A_COND_AL)
tr_mov16_cond(tr_neg_cond(tmpv), 0, *pc); tr_mov16_cond(tr_neg_cond(tmpv), 0, *pc);
@ -1712,12 +1709,8 @@ static void *emit_block_epilogue(int cycles, int cond, int pc, int end_pc)
ssp_block_table[pc]; ssp_block_table[pc];
if (target != NULL) if (target != NULL)
emith_jump(target); emith_jump(target);
else { else
int ops = emith_jump(ssp_drc_next); emith_jump(ssp_drc_next);
end_ptr = tcache_ptr;
// cause the next block to be emitted over jump instruction
tcache_ptr -= ops;
}
} }
else { else {
u32 *target1 = (pc < 0x400) ? u32 *target1 = (pc < 0x400) ?