mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-02-02 13:41:10 +00:00
tcg: Add TCG_OPF_BB_EXIT
Use this to notice the opcodes that exit the TB, which implies that local temps are really dead and need not be synced. Previously we so marked the true end of the TB, but that was immediately overwritten by the la_bb_end invoked by any TCG_OPF_BB_END opcode, like exit_tb. Backports commit ae36a246ed1a0e96c6c4f478f03d047dfa3a8898 from qemu
This commit is contained in:
parent
63cf164724
commit
c2be1cee79
|
@ -197,9 +197,10 @@ DEF(mulsh_i64, 1, 2, 0, IMPL64 | IMPL(TCG_TARGET_HAS_mulsh_i64))
|
||||||
/* QEMU specific */
|
/* QEMU specific */
|
||||||
DEF(insn_start, 0, 0, TLADDR_ARGS * TARGET_INSN_START_WORDS,
|
DEF(insn_start, 0, 0, TLADDR_ARGS * TARGET_INSN_START_WORDS,
|
||||||
TCG_OPF_NOT_PRESENT)
|
TCG_OPF_NOT_PRESENT)
|
||||||
DEF(exit_tb, 0, 0, 1, TCG_OPF_BB_END)
|
DEF(exit_tb, 0, 0, 1, TCG_OPF_BB_EXIT | TCG_OPF_BB_END)
|
||||||
DEF(goto_tb, 0, 0, 1, TCG_OPF_BB_END)
|
DEF(goto_tb, 0, 0, 1, TCG_OPF_BB_EXIT | TCG_OPF_BB_END)
|
||||||
DEF(goto_ptr, 0, 1, 0, TCG_OPF_BB_END | IMPL(TCG_TARGET_HAS_goto_ptr))
|
DEF(goto_ptr, 0, 1, 0,
|
||||||
|
TCG_OPF_BB_EXIT | TCG_OPF_BB_END | IMPL(TCG_TARGET_HAS_goto_ptr))
|
||||||
|
|
||||||
DEF(qemu_ld_i32, 1, TLADDR_ARGS, 1,
|
DEF(qemu_ld_i32, 1, TLADDR_ARGS, 1,
|
||||||
TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
|
TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
|
||||||
|
|
|
@ -690,20 +690,22 @@ typedef struct TCGArgConstraint {
|
||||||
|
|
||||||
/* Bits for TCGOpDef->flags, 8 bits available. */
|
/* Bits for TCGOpDef->flags, 8 bits available. */
|
||||||
enum {
|
enum {
|
||||||
|
/* Instruction exits the translation block. */
|
||||||
|
TCG_OPF_BB_EXIT = 0x01,
|
||||||
/* Instruction defines the end of a basic block. */
|
/* Instruction defines the end of a basic block. */
|
||||||
TCG_OPF_BB_END = 0x01,
|
TCG_OPF_BB_END = 0x02,
|
||||||
/* Instruction clobbers call registers and potentially update globals. */
|
/* Instruction clobbers call registers and potentially update globals. */
|
||||||
TCG_OPF_CALL_CLOBBER = 0x02,
|
TCG_OPF_CALL_CLOBBER = 0x04,
|
||||||
/* Instruction has side effects: it cannot be removed if its outputs
|
/* Instruction has side effects: it cannot be removed if its outputs
|
||||||
are not used, and might trigger exceptions. */
|
are not used, and might trigger exceptions. */
|
||||||
TCG_OPF_SIDE_EFFECTS = 0x04,
|
TCG_OPF_SIDE_EFFECTS = 0x08,
|
||||||
/* Instruction operands are 64-bits (otherwise 32-bits). */
|
/* Instruction operands are 64-bits (otherwise 32-bits). */
|
||||||
TCG_OPF_64BIT = 0x08,
|
TCG_OPF_64BIT = 0x10,
|
||||||
/* Instruction is optional and not implemented by the host, or insn
|
/* Instruction is optional and not implemented by the host, or insn
|
||||||
is generic and should not be implemened by the host. */
|
is generic and should not be implemened by the host. */
|
||||||
TCG_OPF_NOT_PRESENT = 0x10,
|
TCG_OPF_NOT_PRESENT = 0x20,
|
||||||
/* Instruction operands are vectors. */
|
/* Instruction operands are vectors. */
|
||||||
TCG_OPF_VECTOR = 0x20,
|
TCG_OPF_VECTOR = 0x40,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct TCGOpDef {
|
typedef struct TCGOpDef {
|
||||||
|
|
Loading…
Reference in a new issue