mirror of https://gitee.com/openkylin/qemu.git
target/ppc: Move slbfee to decodetree
Reviewed-by: Leandro Lupori <leandro.lupori@eldorado.org.br> Signed-off-by: Lucas Coutinho <lucas.coutinho@eldorado.org.br> Message-Id: <20220701133507.740619-10-lucas.coutinho@eldorado.org.br> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
parent
41b60e46b8
commit
26d02c9d42
|
@ -679,7 +679,7 @@ DEF_HELPER_FLAGS_4(tlbie_isa300, TCG_CALL_NO_WG, void, \
|
|||
DEF_HELPER_FLAGS_3(SLBMTE, TCG_CALL_NO_RWG, void, env, tl, tl)
|
||||
DEF_HELPER_2(SLBMFEE, tl, env, tl)
|
||||
DEF_HELPER_2(SLBMFEV, tl, env, tl)
|
||||
DEF_HELPER_2(find_slb_vsid, tl, env, tl)
|
||||
DEF_HELPER_2(SLBFEE, tl, env, tl)
|
||||
DEF_HELPER_FLAGS_2(SLBIA, TCG_CALL_NO_RWG, void, env, i32)
|
||||
DEF_HELPER_FLAGS_2(SLBIE, TCG_CALL_NO_RWG, void, env, tl)
|
||||
DEF_HELPER_FLAGS_2(SLBIEG, TCG_CALL_NO_RWG, void, env, tl)
|
||||
|
|
|
@ -875,6 +875,8 @@ SLBMTE 011111 ..... ----- ..... 0110010010 - @X_tb
|
|||
SLBMFEV 011111 ..... ----- ..... 1101010011 - @X_tb
|
||||
SLBMFEE 011111 ..... ----- ..... 1110010011 - @X_tb
|
||||
|
||||
SLBFEE 011111 ..... ----- ..... 1111010011 1 @X_tb
|
||||
|
||||
## TLB Management Instructions
|
||||
|
||||
&X_tlbie rb rs ric prs:bool r:bool
|
||||
|
|
|
@ -331,7 +331,7 @@ target_ulong helper_SLBMFEE(CPUPPCState *env, target_ulong rb)
|
|||
return rt;
|
||||
}
|
||||
|
||||
target_ulong helper_find_slb_vsid(CPUPPCState *env, target_ulong rb)
|
||||
target_ulong helper_SLBFEE(CPUPPCState *env, target_ulong rb)
|
||||
{
|
||||
PowerPCCPU *cpu = env_archcpu(env);
|
||||
target_ulong rt = 0;
|
||||
|
|
|
@ -5351,31 +5351,6 @@ static void gen_mtsrin_64b(DisasContext *ctx)
|
|||
#endif /* defined(CONFIG_USER_ONLY) */
|
||||
}
|
||||
|
||||
|
||||
static void gen_slbfee_(DisasContext *ctx)
|
||||
{
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
gen_hvpriv_exception(ctx, POWERPC_EXCP_PRIV_OPC);
|
||||
#else
|
||||
TCGLabel *l1, *l2;
|
||||
|
||||
if (unlikely(ctx->pr)) {
|
||||
gen_hvpriv_exception(ctx, POWERPC_EXCP_PRIV_OPC);
|
||||
return;
|
||||
}
|
||||
gen_helper_find_slb_vsid(cpu_gpr[rS(ctx->opcode)], cpu_env,
|
||||
cpu_gpr[rB(ctx->opcode)]);
|
||||
l1 = gen_new_label();
|
||||
l2 = gen_new_label();
|
||||
tcg_gen_trunc_tl_i32(cpu_crf[0], cpu_so);
|
||||
tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_gpr[rS(ctx->opcode)], -1, l1);
|
||||
tcg_gen_ori_i32(cpu_crf[0], cpu_crf[0], CRF_EQ);
|
||||
tcg_gen_br(l2);
|
||||
gen_set_label(l1);
|
||||
tcg_gen_movi_tl(cpu_gpr[rS(ctx->opcode)], 0);
|
||||
gen_set_label(l2);
|
||||
#endif
|
||||
}
|
||||
#endif /* defined(TARGET_PPC64) */
|
||||
|
||||
/*** Lookaside buffer management ***/
|
||||
|
@ -6805,7 +6780,6 @@ GEN_HANDLER2(mfsrin_64b, "mfsrin", 0x1F, 0x13, 0x14, 0x001F0001,
|
|||
GEN_HANDLER2(mtsr_64b, "mtsr", 0x1F, 0x12, 0x06, 0x0010F801, PPC_SEGMENT_64B),
|
||||
GEN_HANDLER2(mtsrin_64b, "mtsrin", 0x1F, 0x12, 0x07, 0x001F0001,
|
||||
PPC_SEGMENT_64B),
|
||||
GEN_HANDLER2(slbfee_, "slbfee.", 0x1F, 0x13, 0x1E, 0x001F0000, PPC_SEGMENT_64B),
|
||||
#endif
|
||||
GEN_HANDLER(tlbia, 0x1F, 0x12, 0x0B, 0x03FFFC01, PPC_MEM_TLBIA),
|
||||
/*
|
||||
|
|
|
@ -107,6 +107,40 @@ static bool trans_SLBMFEE(DisasContext *ctx, arg_SLBMFEE *a)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool trans_SLBFEE(DisasContext *ctx, arg_SLBFEE *a)
|
||||
{
|
||||
REQUIRE_64BIT(ctx);
|
||||
REQUIRE_INSNS_FLAGS(ctx, SEGMENT_64B);
|
||||
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
gen_inval_exception(ctx, POWERPC_EXCP_PRIV_REG);
|
||||
#else
|
||||
|
||||
#if defined(TARGET_PPC64)
|
||||
TCGLabel *l1, *l2;
|
||||
|
||||
if (unlikely(ctx->pr)) {
|
||||
gen_inval_exception(ctx, POWERPC_EXCP_PRIV_REG);
|
||||
return true;
|
||||
}
|
||||
gen_helper_SLBFEE(cpu_gpr[a->rt], cpu_env,
|
||||
cpu_gpr[a->rb]);
|
||||
l1 = gen_new_label();
|
||||
l2 = gen_new_label();
|
||||
tcg_gen_trunc_tl_i32(cpu_crf[0], cpu_so);
|
||||
tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_gpr[a->rt], -1, l1);
|
||||
tcg_gen_ori_i32(cpu_crf[0], cpu_crf[0], CRF_EQ);
|
||||
tcg_gen_br(l2);
|
||||
gen_set_label(l1);
|
||||
tcg_gen_movi_tl(cpu_gpr[a->rt], 0);
|
||||
gen_set_label(l2);
|
||||
#else
|
||||
qemu_build_not_reached();
|
||||
#endif
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool do_tlbie(DisasContext *ctx, arg_X_tlbie *a, bool local)
|
||||
{
|
||||
#if defined(CONFIG_USER_ONLY)
|
||||
|
|
Loading…
Reference in New Issue