diff options
author | Korey Sewell <ksewell@umich.edu> | 2011-06-19 21:43:35 -0400 |
---|---|---|
committer | Korey Sewell <ksewell@umich.edu> | 2011-06-19 21:43:35 -0400 |
commit | 946b0ed4f48e92b5286544369945c6a16663b590 (patch) | |
tree | 2ae1ea3d8f0652b9af528366bd54609e2791673e /src/cpu/inorder/cpu.cc | |
parent | 1a6d25dc478554cf1e7fe44e607c39989c58f114 (diff) | |
download | gem5-946b0ed4f48e92b5286544369945c6a16663b590.tar.xz |
inorder: simplify handling of split accesses
Diffstat (limited to 'src/cpu/inorder/cpu.cc')
-rw-r--r-- | src/cpu/inorder/cpu.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/cpu/inorder/cpu.cc b/src/cpu/inorder/cpu.cc index bd93d4462..9352d8e9d 100644 --- a/src/cpu/inorder/cpu.cc +++ b/src/cpu/inorder/cpu.cc @@ -447,12 +447,16 @@ InOrderCPU::createBackEndSked(DynInstPtr inst) if ( inst->isLoad() ) { M.needs(DCache, CacheUnit::InitiateReadData); + if (inst->splitInst) + M.needs(DCache, CacheUnit::InitSecondSplitRead); } else if ( inst->isStore() ) { if ( inst->numSrcRegs() >= 2 ) { M.needs(RegManager, UseDefUnit::ReadSrcReg, 1); } M.needs(AGEN, AGENUnit::GenerateAddr); M.needs(DCache, CacheUnit::InitiateWriteData); + if (inst->splitInst) + M.needs(DCache, CacheUnit::InitSecondSplitWrite); } } @@ -460,8 +464,12 @@ InOrderCPU::createBackEndSked(DynInstPtr inst) if (!inst->isNonSpeculative()) { if ( inst->isLoad() ) { W.needs(DCache, CacheUnit::CompleteReadData); + if (inst->splitInst) + W.needs(DCache, CacheUnit::CompleteSecondSplitRead); } else if ( inst->isStore() ) { W.needs(DCache, CacheUnit::CompleteWriteData); + if (inst->splitInst) + W.needs(DCache, CacheUnit::CompleteSecondSplitWrite); } } else { // Finally, Execute Speculative Data @@ -469,14 +477,22 @@ InOrderCPU::createBackEndSked(DynInstPtr inst) if (inst->isLoad()) { W.needs(AGEN, AGENUnit::GenerateAddr); W.needs(DCache, CacheUnit::InitiateReadData); + if (inst->splitInst) + W.needs(DCache, CacheUnit::InitSecondSplitRead); W.needs(DCache, CacheUnit::CompleteReadData); + if (inst->splitInst) + W.needs(DCache, CacheUnit::CompleteSecondSplitRead); } else if (inst->isStore()) { if ( inst->numSrcRegs() >= 2 ) { W.needs(RegManager, UseDefUnit::ReadSrcReg, 1); } W.needs(AGEN, AGENUnit::GenerateAddr); W.needs(DCache, CacheUnit::InitiateWriteData); + if (inst->splitInst) + W.needs(DCache, CacheUnit::InitSecondSplitWrite); W.needs(DCache, CacheUnit::CompleteWriteData); + if (inst->splitInst) + W.needs(DCache, CacheUnit::CompleteSecondSplitWrite); } } else { W.needs(ExecUnit, ExecutionUnit::ExecuteInst); |