diff --git a/arch/alpha/isa_desc b/arch/alpha/isa_desc index ec9fd183a..4364bae34 100644 --- a/arch/alpha/isa_desc +++ b/arch/alpha/isa_desc @@ -2410,11 +2410,8 @@ decode OPCODE default Unknown::unknown() { } }}); 0x01: quiesce({{ - if (!xc->misspeculating()) { - Annotate::QUIESCE(xc); - xc->setStatus(ExecContext::Suspended); - xc->kernelStats.quiesce(); - } + if (!xc->misspeculating()) + AlphaPseudo::quiesce(xc); }}); 0x10: ivlb({{ if (!xc->misspeculating()) { diff --git a/arch/alpha/pseudo_inst.cc b/arch/alpha/pseudo_inst.cc index f8e0036ba..c62de3ce6 100644 --- a/arch/alpha/pseudo_inst.cc +++ b/arch/alpha/pseudo_inst.cc @@ -30,6 +30,7 @@ #include "arch/alpha/pseudo_inst.hh" #include "cpu/exec_context.hh" +#include "sim/annotation.hh" #include "sim/param.hh" #include "sim/serialize.hh" #include "sim/sim_exit.hh" @@ -42,6 +43,18 @@ namespace AlphaPseudo { bool doStatisticsInsts; bool doCheckpointInsts; + bool doQuiesce; + + void + quiesce(ExecContext *xc) + { + if (!doQuiesce) + return; + + Annotate::QUIESCE(xc); + xc->setStatus(ExecContext::Suspended); + xc->kernelStats.quiesce(); + } void m5exit_old(ExecContext *xc) @@ -126,16 +139,20 @@ namespace AlphaPseudo Context context("PseudoInsts"); + Param __quiesce(&context, "quiesce", + "enable quiesce instructions", + true); Param __statistics(&context, "statistics", - "enable the statistics pseudo instructions", + "enable statistics pseudo instructions", true); Param __checkpoint(&context, "checkpoint", - "enable the checkpoint pseudo instructions", + "enable checkpoint pseudo instructions", true); void Context::checkParams() { + doQuiesce = __quiesce; doStatisticsInsts = __statistics; doCheckpointInsts = __checkpoint; } diff --git a/arch/alpha/pseudo_inst.hh b/arch/alpha/pseudo_inst.hh index b212a392c..60031f8cd 100644 --- a/arch/alpha/pseudo_inst.hh +++ b/arch/alpha/pseudo_inst.hh @@ -30,6 +30,7 @@ class ExecContext; namespace AlphaPseudo { + void quiesce(ExecContext *xc); void m5exit(ExecContext *xc); void m5exit_old(ExecContext *xc); void resetstats(ExecContext *xc);