2c2
< * Copyright (c) 2010-2014, 2016-2017 ARM Limited
---
> * Copyright (c) 2010-2014, 2016-2018 ARM Limited
899a900,903
>
> HCR hcr = ((HCR)tc->readMiscReg(MISCREG_HCR_EL2));
> SCR scr = ((SCR)tc->readMiscReg(MISCREG_SCR_EL3));
>
903c907
< if (target_el == EL3 && !ArmSystem::haveSecurity(tc))
---
> if (!ArmSystem::haveEL(tc, target_el))
906c910
< if (target_el == EL2 && !ArmSystem::haveVirtualization(tc))
---
> if (target_el == EL1 && ArmSystem::haveEL(tc, EL2) && scr.ns && hcr.tge)
908a913,923
> if (target_el == EL2 && ArmSystem::haveEL(tc, EL3) && !scr.ns)
> return true;
>
> bool spsr_mode_is_aarch32 = (spsr.width == 1);
> bool known, target_el_is_aarch32;
> std::tie(known, target_el_is_aarch32) = ELUsingAArch32K(tc, target_el);
> assert(known || (target_el == EL0 && ELIs64(tc, EL1)));
>
> if (known && (spsr_mode_is_aarch32 != target_el_is_aarch32))
> return true;
>
913d927
<
918,919d931
< if (target_el == EL2 && !((SCR)tc->readMiscReg(MISCREG_SCR_EL3)).ns)
< return false;
920a933
> // aarch32