summaryrefslogtreecommitdiff
path: root/src/cpu/o3/rename_impl.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu/o3/rename_impl.hh')
-rw-r--r--src/cpu/o3/rename_impl.hh18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/cpu/o3/rename_impl.hh b/src/cpu/o3/rename_impl.hh
index bc024f603..66700563a 100644
--- a/src/cpu/o3/rename_impl.hh
+++ b/src/cpu/o3/rename_impl.hh
@@ -580,7 +580,12 @@ DefaultRename<Impl>::renameInsts(ThreadID tid)
tid, instsInProgress[tid], fromIEW->iewInfo[tid].dispatched);
// Handle serializing the next instruction if necessary.
- if (serializeOnNextInst[tid]) {
+ // Add one more serializing condition [mengjia]
+ if (serializeOnNextInst[tid] || insts_to_rename.front()->isBlock()) {
+ if(insts_to_rename.front()->isBlock()){
+ DPRINTF(Rename, "Rename got rdtscp instructions for thread %d and ROB empty: %d, instProgress: %d, handled: %d.\n",
+ tid, emptyROB[tid], instsInProgress[tid], insts_to_rename.front()->isSerializeHandled());
+ }
if (emptyROB[tid] && instsInProgress[tid] == 0) {
// ROB already empty; no need to serialize.
serializeOnNextInst[tid] = false;
@@ -669,6 +674,12 @@ DefaultRename<Impl>::renameInsts(ThreadID tid)
// instructions. This is mainly due to lack of support for
// out-of-order operations of either of those classes of
// instructions.
+
+ // added debug infor for block state / rdtscp [mengjia]
+ if(inst->isBlock()){
+ DPRINTF(Rename, "Rename got rdtscp instructions for thread %d and ROB empty: %d, instProgress: %d, handled: %d.\n",
+ tid, emptyROB[tid], instsInProgress[tid], inst->isSerializeHandled());
+ }
if ((inst->isIprAccess() || inst->isSerializeBefore()) &&
!inst->isSerializeHandled()) {
DPRINTF(Rename, "Serialize before instruction encountered.\n");
@@ -685,7 +696,7 @@ DefaultRename<Impl>::renameInsts(ThreadID tid)
renameStatus[tid] = SerializeStall;
serializeInst[tid] = inst;
-
+
blockThisCycle = true;
break;
@@ -1370,7 +1381,8 @@ DefaultRename<Impl>::serializeAfter(InstQueue &inst_list, ThreadID tid)
// Mark a bit to say that I must serialize on the next instruction.
serializeOnNextInst[tid] = true;
return;
- }
+ }
+
// Set the next instruction as serializing.
inst_list.front()->setSerializeBefore();