33.10.3.1.4. gem5 ARM WFE
gem5 390a74f59934b85d91489f8a563450d8321b602d does not sleep on the first WFE on either syscall emulation or full system, because the code does:
Fault WfeInst::execute( ExecContext *xc, Trace::InstRecord *traceData) const { [...] if (SevMailbox == 1) { SevMailbox = 0; PseudoInst::quiesceSkip(tc); } else if (tc->getCpuPtr()->getInterruptController( tc->threadId())->checkInterrupts(tc)) { PseudoInst::quiesceSkip(tc); } else { fault = trapWFx(tc, cpsr, scr, true); if (fault == NoFault) { PseudoInst::quiesce(tc); } else { PseudoInst::quiesceSkip(tc); } }
where "quiesce" means "sleep" for laymen like Ciro, and quiesceSkip
means don’t sleep.
SevMailbox
is read from MISCREG_SEV_MAILBOX
which is initialized to 1
at:
ISA::clear() { [...] miscRegs[MISCREG_SEV_MAILBOX] = 1;