mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-22 22:11:11 +00:00
target-arm: Add support for AArch32 S2 negative t0sz
Add support for AArch32 S2 negative t0sz. In preparation for using 40bit IPAs on AArch32. Backports commit 4ee38098010240e0b390061fdd0151ff62d80279 from qemu
This commit is contained in:
parent
7be3cda1ea
commit
a33fca93b3
|
@ -5887,10 +5887,26 @@ static bool get_phys_addr_lpae(CPUARMState *env, target_ulong address,
|
|||
* This is a Non-secure PL0/1 stage 1 translation, so controlled by
|
||||
* TTBCR/TTBR0/TTBR1 in accordance with ARM ARM DDI0406C table B-32:
|
||||
*/
|
||||
t0sz = extract32(tcr->raw_tcr, 0, 6);
|
||||
if (va_size == 64) {
|
||||
/* AArch64 translation. */
|
||||
t0sz = extract32(tcr->raw_tcr, 0, 6);
|
||||
t0sz = MIN(t0sz, 39);
|
||||
t0sz = MAX(t0sz, 16);
|
||||
} else if (mmu_idx != ARMMMUIdx_S2NS) {
|
||||
/* AArch32 stage 1 translation. */
|
||||
t0sz = extract32(tcr->raw_tcr, 0, 3);
|
||||
} else {
|
||||
/* AArch32 stage 2 translation. */
|
||||
bool sext = extract32(tcr->raw_tcr, 4, 1);
|
||||
bool sign = extract32(tcr->raw_tcr, 3, 1);
|
||||
t0sz = sextract32(tcr->raw_tcr, 0, 4);
|
||||
|
||||
/* If the sign-extend bit is not the same as t0sz[3], the result
|
||||
* is unpredictable. Flag this as a guest error. */
|
||||
if (sign != sext) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"AArch32: VTCR.S / VTCR.T0SZ[3] missmatch\n");
|
||||
}
|
||||
}
|
||||
t1sz = extract32(tcr->raw_tcr, 16, 6);
|
||||
if (va_size == 64) {
|
||||
|
|
Loading…
Reference in a new issue