mirror of https://gitee.com/openkylin/qemu.git
target/arm: Fix select for aa64_va_parameters_both
Select should always be 0 for a regime with one range. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20200216194343.21331-3-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
7eeb4c2ce8
commit
71d181640a
|
@ -10241,13 +10241,8 @@ ARMVAParameters aa64_va_parameters_both(CPUARMState *env, uint64_t va,
|
|||
bool tbi, tbid, epd, hpd, using16k, using64k;
|
||||
int select, tsz;
|
||||
|
||||
/*
|
||||
* Bit 55 is always between the two regions, and is canonical for
|
||||
* determining if address tagging is enabled.
|
||||
*/
|
||||
select = extract64(va, 55, 1);
|
||||
|
||||
if (!regime_has_2_ranges(mmu_idx)) {
|
||||
select = 0;
|
||||
tsz = extract32(tcr, 0, 6);
|
||||
using64k = extract32(tcr, 14, 1);
|
||||
using16k = extract32(tcr, 15, 1);
|
||||
|
@ -10260,23 +10255,30 @@ ARMVAParameters aa64_va_parameters_both(CPUARMState *env, uint64_t va,
|
|||
tbid = extract32(tcr, 29, 1);
|
||||
}
|
||||
epd = false;
|
||||
} else if (!select) {
|
||||
tsz = extract32(tcr, 0, 6);
|
||||
epd = extract32(tcr, 7, 1);
|
||||
using64k = extract32(tcr, 14, 1);
|
||||
using16k = extract32(tcr, 15, 1);
|
||||
tbi = extract64(tcr, 37, 1);
|
||||
hpd = extract64(tcr, 41, 1);
|
||||
tbid = extract64(tcr, 51, 1);
|
||||
} else {
|
||||
int tg = extract32(tcr, 30, 2);
|
||||
using16k = tg == 1;
|
||||
using64k = tg == 3;
|
||||
tsz = extract32(tcr, 16, 6);
|
||||
epd = extract32(tcr, 23, 1);
|
||||
tbi = extract64(tcr, 38, 1);
|
||||
hpd = extract64(tcr, 42, 1);
|
||||
tbid = extract64(tcr, 52, 1);
|
||||
/*
|
||||
* Bit 55 is always between the two regions, and is canonical for
|
||||
* determining if address tagging is enabled.
|
||||
*/
|
||||
select = extract64(va, 55, 1);
|
||||
if (!select) {
|
||||
tsz = extract32(tcr, 0, 6);
|
||||
epd = extract32(tcr, 7, 1);
|
||||
using64k = extract32(tcr, 14, 1);
|
||||
using16k = extract32(tcr, 15, 1);
|
||||
tbi = extract64(tcr, 37, 1);
|
||||
hpd = extract64(tcr, 41, 1);
|
||||
tbid = extract64(tcr, 51, 1);
|
||||
} else {
|
||||
int tg = extract32(tcr, 30, 2);
|
||||
using16k = tg == 1;
|
||||
using64k = tg == 3;
|
||||
tsz = extract32(tcr, 16, 6);
|
||||
epd = extract32(tcr, 23, 1);
|
||||
tbi = extract64(tcr, 38, 1);
|
||||
hpd = extract64(tcr, 42, 1);
|
||||
tbid = extract64(tcr, 52, 1);
|
||||
}
|
||||
}
|
||||
tsz = MIN(tsz, 39); /* TODO: ARMv8.4-TTST */
|
||||
tsz = MAX(tsz, 16); /* TODO: ARMv8.2-LVA */
|
||||
|
|
Loading…
Reference in New Issue