summaryrefslogtreecommitdiff
path: root/src/arch/arm/isa/insts/misc.isa
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/isa/insts/misc.isa')
-rw-r--r--src/arch/arm/isa/insts/misc.isa48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/arch/arm/isa/insts/misc.isa b/src/arch/arm/isa/insts/misc.isa
index 64bff6cb1..7f9a5c171 100644
--- a/src/arch/arm/isa/insts/misc.isa
+++ b/src/arch/arm/isa/insts/misc.isa
@@ -468,6 +468,54 @@ let {{
decoder_output += BasicConstructor.subst(nopIop)
exec_output += PredOpExecute.subst(nopIop)
+ yieldIop = InstObjParams("yield", "YieldInst", "PredOp", \
+ { "code" : "", "predicate_test" : predicateTest })
+ header_output += BasicDeclare.subst(yieldIop)
+ decoder_output += BasicConstructor.subst(yieldIop)
+ exec_output += PredOpExecute.subst(yieldIop)
+
+ wfeCode = '''
+#if FULL_SYSTEM
+ if (SevMailbox)
+ SevMailbox = 0;
+ else
+ PseudoInst::quiesce(xc->tcBase());
+#endif
+ '''
+ wfeIop = InstObjParams("wfe", "WfeInst", "PredOp", \
+ { "code" : wfeCode, "predicate_test" : predicateTest },
+ ["IsNonSpeculative", "IsQuiesce"])
+ header_output += BasicDeclare.subst(wfeIop)
+ decoder_output += BasicConstructor.subst(wfeIop)
+ exec_output += PredOpExecute.subst(wfeIop)
+
+ wfiCode = '''
+#if FULL_SYSTEM
+ PseudoInst::quiesce(xc->tcBase());
+#endif
+ '''
+ wfiIop = InstObjParams("wfi", "WfiInst", "PredOp", \
+ { "code" : wfiCode, "predicate_test" : predicateTest },
+ ["IsNonSpeculative", "IsQuiesce"])
+ header_output += BasicDeclare.subst(wfiIop)
+ decoder_output += BasicConstructor.subst(wfiIop)
+ exec_output += PredOpExecute.subst(wfiIop)
+
+ sevCode = '''
+ // Need a way for O3 to not scoreboard these accesses as pipe flushes.
+ System *sys = xc->tcBase()->getSystemPtr();
+ for (int x = 0; x < sys->numContexts(); x++) {
+ ThreadContext *oc = sys->getThreadContext(x);
+ oc->setMiscReg(MISCREG_SEV_MAILBOX, 1);
+ }
+ '''
+ sevIop = InstObjParams("sev", "SevInst", "PredOp", \
+ { "code" : sevCode, "predicate_test" : predicateTest },
+ ["IsNonSpeculative", "IsQuiesce"])
+ header_output += BasicDeclare.subst(sevIop)
+ decoder_output += BasicConstructor.subst(sevIop)
+ exec_output += PredOpExecute.subst(sevIop)
+
itIop = InstObjParams("it", "ItInst", "PredOp", \
{ "code" : "Itstate = machInst.newItstate;",
"predicate_test" : predicateTest })