673d672
< HCR hcr = Hcr;
676d674
< SCTLR sctlr = Sctlr;
686,699d683
< } else if (cpsr.el == EL0 && !sctlr.ntwe) {
< PseudoInst::quiesceSkip(tc);
< fault = std::make_shared<SupervisorTrap>(machInst, 0x1E00001,
< EC_TRAPPED_WFI_WFE);
< } else if (ArmSystem::haveVirtualization(tc) &&
< !inSecureState(scr, cpsr) && (cpsr.mode != MODE_HYP) &&
< hcr.twe) {
< PseudoInst::quiesceSkip(tc);
< fault = std::make_shared<HypervisorTrap>(machInst, 0x1E00001,
< EC_TRAPPED_WFI_WFE);
< } else if (ArmSystem::haveSecurity(tc) && cpsr.el != EL3 && scr.twe) {
< PseudoInst::quiesceSkip(tc);
< fault = std::make_shared<SecureMonitorTrap>(machInst, 0x1E00001,
< EC_TRAPPED_WFI_WFE);
701c685,690
< PseudoInst::quiesce(tc);
---
> fault = trapWFx(tc, cpsr, scr, true);
> if (fault == NoFault) {
> PseudoInst::quiesce(tc);
> } else {
> PseudoInst::quiesceSkip(tc);
> }
723d711
< SCTLR sctlr = Sctlr;
730,742d717
< } else if (cpsr.el == EL0 && !sctlr.ntwi) {
< PseudoInst::quiesceSkip(tc);
< fault = std::make_shared<SupervisorTrap>(machInst, 0x1E00000,
< EC_TRAPPED_WFI_WFE);
< } else if (ArmSystem::haveVirtualization(tc) && hcr.twi &&
< (cpsr.mode != MODE_HYP) && !inSecureState(scr, cpsr)) {
< PseudoInst::quiesceSkip(tc);
< fault = std::make_shared<HypervisorTrap>(machInst, 0x1E00000,
< EC_TRAPPED_WFI_WFE);
< } else if (ArmSystem::haveSecurity(tc) && cpsr.el != EL3 && scr.twi) {
< PseudoInst::quiesceSkip(tc);
< fault = std::make_shared<SecureMonitorTrap>(machInst, 0x1E00000,
< EC_TRAPPED_WFI_WFE);
744c719,724
< PseudoInst::quiesce(tc);
---
> fault = trapWFx(tc, cpsr, scr, false);
> if (fault == NoFault) {
> PseudoInst::quiesce(tc);
> } else {
> PseudoInst::quiesceSkip(tc);
> }