mirror of https://gitee.com/openkylin/qemu.git
target/microblaze: Move bimm to BIMM_FLAG
It makes sense to keep BIMM with D_FLAG, as they can be written back to iflags at the same time. BIMM_FLAG does not need to be added to IFLAGS_TB_MASK because it does not affect the next TB, only the exception path out of the current TB. Renumber IMM_FLAG, as the value 4 holds no particular significance; pack these two flags at the bottom of the bitfield. Tested-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
31f163d3da
commit
7b34f45f9f
|
@ -231,7 +231,6 @@ typedef struct CPUMBState CPUMBState;
|
|||
struct CPUMBState {
|
||||
uint32_t btaken;
|
||||
uint32_t btarget;
|
||||
uint32_t bimm;
|
||||
|
||||
uint32_t imm;
|
||||
uint32_t regs[32];
|
||||
|
@ -253,7 +252,8 @@ struct CPUMBState {
|
|||
uint32_t res_val;
|
||||
|
||||
/* Internal flags. */
|
||||
#define IMM_FLAG 4
|
||||
#define IMM_FLAG (1 << 0)
|
||||
#define BIMM_FLAG (1 << 1)
|
||||
/* MSR_EE (1 << 8) */
|
||||
/* MSR_UM (1 << 11) */
|
||||
/* MSR_VM (1 << 13) */
|
||||
|
|
|
@ -166,7 +166,7 @@ void mb_cpu_do_interrupt(CPUState *cs)
|
|||
/* Reexecute the branch. */
|
||||
env->regs[17] -= 4;
|
||||
/* was the branch immprefixed?. */
|
||||
if (env->bimm) {
|
||||
if (env->iflags & BIMM_FLAG) {
|
||||
env->regs[17] -= 4;
|
||||
log_cpu_state_mask(CPU_LOG_INT, cs, 0);
|
||||
}
|
||||
|
|
|
@ -1351,13 +1351,11 @@ static void eval_cond_jmp(DisasContext *dc, TCGv_i32 pc_true, TCGv_i32 pc_false)
|
|||
|
||||
static void dec_setup_dslot(DisasContext *dc)
|
||||
{
|
||||
TCGv_i32 tmp = tcg_const_i32(dc->type_b && (dc->tb_flags & IMM_FLAG));
|
||||
|
||||
dc->delayed_branch = 2;
|
||||
dc->tb_flags |= D_FLAG;
|
||||
|
||||
tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUMBState, bimm));
|
||||
tcg_temp_free_i32(tmp);
|
||||
dc->delayed_branch = 2;
|
||||
dc->tb_flags |= D_FLAG;
|
||||
if (dc->type_b && (dc->tb_flags & IMM_FLAG)) {
|
||||
dc->tb_flags |= BIMM_FLAG;
|
||||
}
|
||||
}
|
||||
|
||||
static void dec_bcc(DisasContext *dc)
|
||||
|
|
Loading…
Reference in New Issue