target/arm: Pass unpriv bool to get_a64_user_mem_index()
In every place that we call the get_a64_user_mem_index() function we do it like this: memidx = a->unpriv ? get_a64_user_mem_index(s) : get_mem_index(s); Refactor so the caller passes in the bool that says whether they want the 'unpriv' or 'normal' mem_index rather than having to do the ?: themselves. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20230912140434.1333369-4-peter.maydell@linaro.org
This commit is contained in:
parent
dbc678f90a
commit
81466e4bad
@ -105,9 +105,17 @@ void a64_translate_init(void)
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the core mmu_idx to use for A64 "unprivileged load/store" insns
|
||||
* Return the core mmu_idx to use for A64 load/store insns which
|
||||
* have a "unprivileged load/store" variant. Those insns access
|
||||
* EL0 if executed from an EL which has control over EL0 (usually
|
||||
* EL1) but behave like normal loads and stores if executed from
|
||||
* elsewhere (eg EL3).
|
||||
*
|
||||
* @unpriv : true for the unprivileged encoding; false for the
|
||||
* normal encoding (in which case we will return the same
|
||||
* thing as get_mem_index().
|
||||
*/
|
||||
static int get_a64_user_mem_index(DisasContext *s)
|
||||
static int get_a64_user_mem_index(DisasContext *s, bool unpriv)
|
||||
{
|
||||
/*
|
||||
* If AccType_UNPRIV is not used, the insn uses AccType_NORMAL,
|
||||
@ -115,7 +123,7 @@ static int get_a64_user_mem_index(DisasContext *s)
|
||||
*/
|
||||
ARMMMUIdx useridx = s->mmu_idx;
|
||||
|
||||
if (s->unpriv) {
|
||||
if (unpriv && s->unpriv) {
|
||||
/*
|
||||
* We have pre-computed the condition for AccType_UNPRIV.
|
||||
* Therefore we should never get here with a mmu_idx for
|
||||
@ -3088,7 +3096,7 @@ static void op_addr_ldst_imm_pre(DisasContext *s, arg_ldst_imm *a,
|
||||
if (!a->p) {
|
||||
tcg_gen_addi_i64(*dirty_addr, *dirty_addr, offset);
|
||||
}
|
||||
memidx = a->unpriv ? get_a64_user_mem_index(s) : get_mem_index(s);
|
||||
memidx = get_a64_user_mem_index(s, a->unpriv);
|
||||
*clean_addr = gen_mte_check1_mmuidx(s, *dirty_addr, is_store,
|
||||
a->w || a->rn != 31,
|
||||
mop, a->unpriv, memidx);
|
||||
@ -3109,7 +3117,7 @@ static bool trans_STR_i(DisasContext *s, arg_ldst_imm *a)
|
||||
{
|
||||
bool iss_sf, iss_valid = !a->w;
|
||||
TCGv_i64 clean_addr, dirty_addr, tcg_rt;
|
||||
int memidx = a->unpriv ? get_a64_user_mem_index(s) : get_mem_index(s);
|
||||
int memidx = get_a64_user_mem_index(s, a->unpriv);
|
||||
MemOp mop = finalize_memop(s, a->sz + a->sign * MO_SIGN);
|
||||
|
||||
op_addr_ldst_imm_pre(s, a, &clean_addr, &dirty_addr, a->imm, true, mop);
|
||||
@ -3127,7 +3135,7 @@ static bool trans_LDR_i(DisasContext *s, arg_ldst_imm *a)
|
||||
{
|
||||
bool iss_sf, iss_valid = !a->w;
|
||||
TCGv_i64 clean_addr, dirty_addr, tcg_rt;
|
||||
int memidx = a->unpriv ? get_a64_user_mem_index(s) : get_mem_index(s);
|
||||
int memidx = get_a64_user_mem_index(s, a->unpriv);
|
||||
MemOp mop = finalize_memop(s, a->sz + a->sign * MO_SIGN);
|
||||
|
||||
op_addr_ldst_imm_pre(s, a, &clean_addr, &dirty_addr, a->imm, false, mop);
|
||||
|
Loading…
Reference in New Issue
Block a user