From 1fcd389fa327493d66767ee11698ccff8fccb7ac Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Wed, 2 Jun 2010 12:58:12 -0500 Subject: ARM: Make sure macroops aren't interrupted midinstruction. Do this by setting the delayed commit flag for all but the last microop. --- src/arch/arm/insts/macromem.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/arch/arm/insts/macromem.cc') diff --git a/src/arch/arm/insts/macromem.cc b/src/arch/arm/insts/macromem.cc index 8e9e60f30..01ec3e1d8 100644 --- a/src/arch/arm/insts/macromem.cc +++ b/src/arch/arm/insts/macromem.cc @@ -128,6 +128,13 @@ MacroMemOp::MacroMemOp(const char *mnem, ExtMachInst machInst, } (*uop)->setLastMicroop(); + + for (StaticInstPtr *curUop = microOps; + !(*curUop)->isLastMicroop(); curUop++) { + MicroOp * uopPtr = dynamic_cast(curUop->get()); + assert(uopPtr); + uopPtr->setDelayedCommit(); + } } MacroVFPMemOp::MacroVFPMemOp(const char *mnem, ExtMachInst machInst, @@ -198,6 +205,13 @@ MacroVFPMemOp::MacroVFPMemOp(const char *mnem, ExtMachInst machInst, assert(numMicroops == i); microOps[numMicroops - 1]->setLastMicroop(); + + for (StaticInstPtr *curUop = microOps; + !(*curUop)->isLastMicroop(); curUop++) { + MicroOp * uopPtr = dynamic_cast(curUop->get()); + assert(uopPtr); + uopPtr->setDelayedCommit(); + } } } -- cgit v1.2.3