mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-03-28 15:46:52 +00:00
tcg/s390: fix branch target change during code retranslation
Make sure to not modify the branch target. This ensure that the branch target is not corrupted during partial retranslation. Backports commit cd3b29b745b0ff393b2d37317837bc726b8dacc8 from qemu
This commit is contained in:
parent
fa2b872b0b
commit
ba73fd9162
|
@ -1659,8 +1659,10 @@ static void tcg_out_qemu_ld(TCGContext* s, TCGReg data_reg, TCGReg addr_reg,
|
|||
|
||||
base_reg = tcg_out_tlb_read(s, addr_reg, opc, mem_index, 1);
|
||||
|
||||
label_ptr = s->code_ptr + 1;
|
||||
tcg_out_insn(s, RI, BRC, S390_CC_NE, 0);
|
||||
/* We need to keep the offset unchanged for retranslation. */
|
||||
tcg_out16(s, RI_BRC | (S390_CC_NE << 4));
|
||||
label_ptr = s->code_ptr;
|
||||
s->code_ptr += 1;
|
||||
|
||||
tcg_out_qemu_ld_direct(s, opc, data_reg, base_reg, TCG_REG_R2, 0);
|
||||
|
||||
|
@ -1685,8 +1687,10 @@ static void tcg_out_qemu_st(TCGContext* s, TCGReg data_reg, TCGReg addr_reg,
|
|||
|
||||
base_reg = tcg_out_tlb_read(s, addr_reg, opc, mem_index, 0);
|
||||
|
||||
label_ptr = s->code_ptr + 1;
|
||||
tcg_out_insn(s, RI, BRC, S390_CC_NE, 0);
|
||||
/* We need to keep the offset unchanged for retranslation. */
|
||||
tcg_out16(s, RI_BRC | (S390_CC_NE << 4));
|
||||
label_ptr = s->code_ptr;
|
||||
s->code_ptr += 1;
|
||||
|
||||
tcg_out_qemu_st_direct(s, opc, data_reg, base_reg, TCG_REG_R2, 0);
|
||||
|
||||
|
|
Loading…
Reference in a new issue