# Node ID d60219f33c24e1adc60b740b62a3753285a6e8d5 # Parent ea6f1011ab07bafa16a2a4d7932c13377fb0ee8c diff --git a/src/arch/x86/isa/decoder/two_byte_opcodes.isa b/src/arch/x86/isa/decoder/two_byte_opcodes.isa --- a/src/arch/x86/isa/decoder/two_byte_opcodes.isa +++ b/src/arch/x86/isa/decoder/two_byte_opcodes.isa @@ -81,8 +81,7 @@ xc->getAddrMonitor()->vAddr, m, s, f); xc->mwaitAtomic(xc->tcBase()); - MicroHalt hltObj(machInst, mnemonic, 0x0); - hltObj.execute(xc, traceData); + xc->tcBase()->suspend(); }}); default: Inst::UD2(); } diff --git a/src/arch/x86/isa/formats/monitor_mwait.isa b/src/arch/x86/isa/formats/monitor_mwait.isa --- a/src/arch/x86/isa/formats/monitor_mwait.isa +++ b/src/arch/x86/isa/formats/monitor_mwait.isa @@ -79,9 +79,8 @@ Fault %(class_name)s::completeAcc(PacketPtr pkt, CPU_EXEC_CONTEXT *xc, Trace::InstRecord *traceData) const { - MicroHalt hltObj(machInst, mnemonic, 0x0); - if(xc->mwait(pkt)) { - hltObj.execute(xc, traceData); + if (xc->mwait(pkt)) { + xc->tcBase()->suspend(); } return NoFault; } @@ -99,6 +98,7 @@ { flags[IsMemRef] = 1; flags[IsLoad] = 1; + flags[IsSerializeBefore] = 1; } std::string generateDisassembly(Addr pc,