diff -r e78b6bba67ca -r 8f02c926ead6 src/arch/arm/insts/macromem.hh --- a/src/arch/arm/insts/macromem.hh Fri Oct 01 17:57:56 2010 -0500 +++ b/src/arch/arm/insts/macromem.hh Tue Oct 26 23:55:34 2010 -0500 @@ -70,13 +70,6 @@ : PredOp(mnem, machInst, __opClass) { } - - public: - void - setDelayedCommit() - { - flags[IsDelayedCommit] = true; - } }; /** diff -r e78b6bba67ca -r 8f02c926ead6 src/arch/arm/isa/templates/mem.isa --- a/src/arch/arm/isa/templates/mem.isa Fri Oct 01 17:57:56 2010 -0500 +++ b/src/arch/arm/isa/templates/mem.isa Tue Oct 26 23:55:34 2010 -0500 @@ -960,6 +960,7 @@ assert(numMicroops >= 2); uops = new StaticInstPtr[numMicroops]; uops[0] = new %(acc_name)s(machInst, _base, _mode, _wb); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); #endif @@ -977,6 +978,7 @@ assert(numMicroops >= 2); uops = new StaticInstPtr[numMicroops]; uops[0] = new %(acc_name)s(machInst, _regMode, _mode, _wb); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); #endif @@ -1006,6 +1008,7 @@ assert(numMicroops >= 2); uops = new StaticInstPtr[numMicroops]; uops[0] = new %(acc_name)s(machInst, _dest, _dest2, _base, _add, _imm); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); #endif @@ -1027,6 +1030,7 @@ uops = new StaticInstPtr[numMicroops]; uops[0] = new %(acc_name)s(machInst, _result, _dest, _dest2, _base, _add, _imm); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); #endif @@ -1044,6 +1048,7 @@ assert(numMicroops >= 2); uops = new StaticInstPtr[numMicroops]; uops[0] = new %(acc_name)s(machInst, _dest, _base, _add, _imm); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); #endif @@ -1064,6 +1069,7 @@ uops = new StaticInstPtr[numMicroops]; uops[0] = new %(acc_name)s(machInst, _result, _dest, _base, _add, _imm); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); #endif @@ -1086,6 +1092,7 @@ uops = new StaticInstPtr[numMicroops]; uops[0] = new %(acc_name)s(machInst, _dest, _dest2, _base, _add, _shiftAmt, _shiftType, _index); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); #endif @@ -1107,6 +1114,7 @@ uops = new StaticInstPtr[numMicroops]; uops[0] = new %(acc_name)s(machInst, _dest, _base, _add, _shiftAmt, _shiftType, _index); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); #endif @@ -1130,14 +1138,17 @@ if ((_dest == _index) || (_dest2 == _index)) { IntRegIndex wbIndexReg = INTREG_UREG0; uops[0] = new MicroUopRegMov(machInst, INTREG_UREG0, _index); + uops[0]->setDelayedCommit(); uops[1] = new %(acc_name)s(machInst, _dest, _dest2, _base, _add, _shiftAmt, _shiftType, _index); + uops[1]->setDelayedCommit(); uops[2] = new %(wb_decl)s; uops[2]->setLastMicroop(); } else { IntRegIndex wbIndexReg = index; uops[0] = new %(acc_name)s(machInst, _dest, _dest2, _base, _add, _shiftAmt, _shiftType, _index); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); } @@ -1162,20 +1173,25 @@ IntRegIndex wbIndexReg = index; uops[0] = new %(acc_name)s(machInst, INTREG_UREG0, _base, _add, _shiftAmt, _shiftType, _index); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; + uops[1]->setDelayedCommit(); uops[2] = new MicroUopRegMov(machInst, INTREG_PC, INTREG_UREG0); uops[2]->setLastMicroop(); } else if(_dest == _index) { IntRegIndex wbIndexReg = INTREG_UREG0; uops[0] = new MicroUopRegMov(machInst, INTREG_UREG0, _index); + uops[0]->setDelayedCommit(); uops[1] = new %(acc_name)s(machInst, _dest, _base, _add, _shiftAmt, _shiftType, _index); + uops[1]->setDelayedCommit(); uops[2] = new %(wb_decl)s; uops[2]->setLastMicroop(); } else { IntRegIndex wbIndexReg = index; uops[0] = new %(acc_name)s(machInst, _dest, _base, _add, _shiftAmt, _shiftType, _index); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); @@ -1197,11 +1213,14 @@ if (_dest == INTREG_PC) { uops[0] = new %(acc_name)s(machInst, INTREG_UREG0, _base, _add, _imm); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; + uops[1]->setDelayedCommit(); uops[2] = new MicroUopRegMov(machInst, INTREG_PC, INTREG_UREG0); uops[2]->setLastMicroop(); } else { uops[0] = new %(acc_name)s(machInst, _dest, _base, _add, _imm); + uops[0]->setDelayedCommit(); uops[1] = new %(wb_decl)s; uops[1]->setLastMicroop(); } diff -r e78b6bba67ca -r 8f02c926ead6 src/cpu/static_inst.hh --- a/src/cpu/static_inst.hh Fri Oct 01 17:57:56 2010 -0500 +++ b/src/cpu/static_inst.hh Tue Oct 26 23:55:34 2010 -0500 @@ -284,6 +284,8 @@ //@} void setLastMicroop() { flags[IsLastMicroop] = true; } + void setDelayedCommit() { flags[IsDelayedCommit] = true; } + /// Operation class. Used to select appropriate function unit in issue. OpClass opClass() const { return _opClass; } };