commit_impl.hh (7684:ce48527a3edb) commit_impl.hh (7720:65d338a8dba4)
1/*
2 * Copyright (c) 2004-2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 114 unchanged lines hidden (view full) ---

123 for (ThreadID tid = 0; tid < numThreads; tid++) {
124 commitStatus[tid] = Idle;
125 changedROBNumEntries[tid] = false;
126 checkEmptyROB[tid] = false;
127 trapInFlight[tid] = false;
128 committedStores[tid] = false;
129 trapSquash[tid] = false;
130 tcSquash[tid] = false;
1/*
2 * Copyright (c) 2004-2006 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 114 unchanged lines hidden (view full) ---

123 for (ThreadID tid = 0; tid < numThreads; tid++) {
124 commitStatus[tid] = Idle;
125 changedROBNumEntries[tid] = false;
126 checkEmptyROB[tid] = false;
127 trapInFlight[tid] = false;
128 committedStores[tid] = false;
129 trapSquash[tid] = false;
130 tcSquash[tid] = false;
131 microPC[tid] = 0;
132 nextMicroPC[tid] = 0;
133 PC[tid] = 0;
134 nextPC[tid] = 0;
135 nextNPC[tid] = 0;
131 pc[tid].set(0);
136 }
137#if FULL_SYSTEM
138 interrupt = NoFault;
139#endif
140}
141
142template <class Impl>
143std::string

--- 364 unchanged lines hidden (view full) ---

508 toIEW->commitInfo[tid].squash = true;
509
510 // Send back the rob squashing signal so other stages know that
511 // the ROB is in the process of squashing.
512 toIEW->commitInfo[tid].robSquashing = true;
513
514 toIEW->commitInfo[tid].branchMispredict = false;
515
132 }
133#if FULL_SYSTEM
134 interrupt = NoFault;
135#endif
136}
137
138template <class Impl>
139std::string

--- 364 unchanged lines hidden (view full) ---

504 toIEW->commitInfo[tid].squash = true;
505
506 // Send back the rob squashing signal so other stages know that
507 // the ROB is in the process of squashing.
508 toIEW->commitInfo[tid].robSquashing = true;
509
510 toIEW->commitInfo[tid].branchMispredict = false;
511
516 toIEW->commitInfo[tid].nextPC = PC[tid];
517 toIEW->commitInfo[tid].nextNPC = nextPC[tid];
518 toIEW->commitInfo[tid].nextMicroPC = nextMicroPC[tid];
512 toIEW->commitInfo[tid].pc = pc[tid];
519}
520
521template <class Impl>
522void
523DefaultCommit<Impl>::squashFromTrap(ThreadID tid)
524{
525 squashAll(tid);
526
513}
514
515template <class Impl>
516void
517DefaultCommit<Impl>::squashFromTrap(ThreadID tid)
518{
519 squashAll(tid);
520
527 DPRINTF(Commit, "Squashing from trap, restarting at PC %#x\n", PC[tid]);
521 DPRINTF(Commit, "Squashing from trap, restarting at PC %s\n", pc[tid]);
528
529 thread[tid]->trapPending = false;
530 thread[tid]->inSyscall = false;
531 trapInFlight[tid] = false;
532
533 trapSquash[tid] = false;
534
535 commitStatus[tid] = ROBSquashing;
536 cpu->activityThisCycle();
537}
538
539template <class Impl>
540void
541DefaultCommit<Impl>::squashFromTC(ThreadID tid)
542{
543 squashAll(tid);
544
522
523 thread[tid]->trapPending = false;
524 thread[tid]->inSyscall = false;
525 trapInFlight[tid] = false;
526
527 trapSquash[tid] = false;
528
529 commitStatus[tid] = ROBSquashing;
530 cpu->activityThisCycle();
531}
532
533template <class Impl>
534void
535DefaultCommit<Impl>::squashFromTC(ThreadID tid)
536{
537 squashAll(tid);
538
545 DPRINTF(Commit, "Squashing from TC, restarting at PC %#x\n", PC[tid]);
539 DPRINTF(Commit, "Squashing from TC, restarting at PC %s\n", pc[tid]);
546
547 thread[tid]->inSyscall = false;
548 assert(!thread[tid]->trapPending);
549
550 commitStatus[tid] = ROBSquashing;
551 cpu->activityThisCycle();
552
553 tcSquash[tid] = false;

--- 52 unchanged lines hidden (view full) ---

606
607 if (!rob->isEmpty(tid) && rob->readHeadInst(tid)->readyToCommit()) {
608 // The ROB has more instructions it can commit. Its next status
609 // will be active.
610 _nextStatus = Active;
611
612 DynInstPtr inst = rob->readHeadInst(tid);
613
540
541 thread[tid]->inSyscall = false;
542 assert(!thread[tid]->trapPending);
543
544 commitStatus[tid] = ROBSquashing;
545 cpu->activityThisCycle();
546
547 tcSquash[tid] = false;

--- 52 unchanged lines hidden (view full) ---

600
601 if (!rob->isEmpty(tid) && rob->readHeadInst(tid)->readyToCommit()) {
602 // The ROB has more instructions it can commit. Its next status
603 // will be active.
604 _nextStatus = Active;
605
606 DynInstPtr inst = rob->readHeadInst(tid);
607
614 DPRINTF(Commit,"[tid:%i]: Instruction [sn:%lli] PC %#x is head of"
608 DPRINTF(Commit,"[tid:%i]: Instruction [sn:%lli] PC %s is head of"
615 " ROB and ready to commit\n",
609 " ROB and ready to commit\n",
616 tid, inst->seqNum, inst->readPC());
610 tid, inst->seqNum, inst->pcState());
617
618 } else if (!rob->isEmpty(tid)) {
619 DynInstPtr inst = rob->readHeadInst(tid);
620
621 DPRINTF(Commit,"[tid:%i]: Can't commit, Instruction [sn:%lli] PC "
611
612 } else if (!rob->isEmpty(tid)) {
613 DynInstPtr inst = rob->readHeadInst(tid);
614
615 DPRINTF(Commit,"[tid:%i]: Can't commit, Instruction [sn:%lli] PC "
622 "%#x is head of ROB and not ready\n",
623 tid, inst->seqNum, inst->readPC());
616 "%s is head of ROB and not ready\n",
617 tid, inst->seqNum, inst->pcState());
624 }
625
626 DPRINTF(Commit, "[tid:%i]: ROB has %d insts & %d free entries.\n",
627 tid, rob->countInsts(tid), rob->numFreeEntries(tid));
628 }
629
630
631 if (wroteToTimeBuffer) {

--- 101 unchanged lines hidden (view full) ---

733
734 DPRINTF(Commit, "[tid:%i]: Squashing due to PC %#x [sn:%i]\n",
735 tid,
736 fromIEW->mispredPC[tid],
737 fromIEW->squashedSeqNum[tid]);
738
739 DPRINTF(Commit, "[tid:%i]: Redirecting to PC %#x\n",
740 tid,
618 }
619
620 DPRINTF(Commit, "[tid:%i]: ROB has %d insts & %d free entries.\n",
621 tid, rob->countInsts(tid), rob->numFreeEntries(tid));
622 }
623
624
625 if (wroteToTimeBuffer) {

--- 101 unchanged lines hidden (view full) ---

727
728 DPRINTF(Commit, "[tid:%i]: Squashing due to PC %#x [sn:%i]\n",
729 tid,
730 fromIEW->mispredPC[tid],
731 fromIEW->squashedSeqNum[tid]);
732
733 DPRINTF(Commit, "[tid:%i]: Redirecting to PC %#x\n",
734 tid,
741 fromIEW->nextPC[tid]);
735 fromIEW->pc[tid].nextInstAddr());
742
743 commitStatus[tid] = ROBSquashing;
744
745 // If we want to include the squashing instruction in the squash,
746 // then use one older sequence number.
747 InstSeqNum squashed_inst = fromIEW->squashedSeqNum[tid];
748
749 if (fromIEW->includeSquashInst[tid] == true) {

--- 16 unchanged lines hidden (view full) ---

766 toIEW->commitInfo[tid].robSquashing = true;
767
768 toIEW->commitInfo[tid].branchMispredict =
769 fromIEW->branchMispredict[tid];
770
771 toIEW->commitInfo[tid].branchTaken =
772 fromIEW->branchTaken[tid];
773
736
737 commitStatus[tid] = ROBSquashing;
738
739 // If we want to include the squashing instruction in the squash,
740 // then use one older sequence number.
741 InstSeqNum squashed_inst = fromIEW->squashedSeqNum[tid];
742
743 if (fromIEW->includeSquashInst[tid] == true) {

--- 16 unchanged lines hidden (view full) ---

760 toIEW->commitInfo[tid].robSquashing = true;
761
762 toIEW->commitInfo[tid].branchMispredict =
763 fromIEW->branchMispredict[tid];
764
765 toIEW->commitInfo[tid].branchTaken =
766 fromIEW->branchTaken[tid];
767
774 toIEW->commitInfo[tid].nextPC = fromIEW->nextPC[tid];
775 toIEW->commitInfo[tid].nextNPC = fromIEW->nextNPC[tid];
776 toIEW->commitInfo[tid].nextMicroPC = fromIEW->nextMicroPC[tid];
768 toIEW->commitInfo[tid].pc = fromIEW->pc[tid];
777
778 toIEW->commitInfo[tid].mispredPC = fromIEW->mispredPC[tid];
779
780 if (toIEW->commitInfo[tid].branchMispredict) {
781 ++branchMispredicts;
782 }
783 }
784

--- 90 unchanged lines hidden (view full) ---

875
876 rob->retireHead(commit_thread);
877
878 ++commitSquashedInsts;
879
880 // Record that the number of ROB entries has changed.
881 changedROBNumEntries[tid] = true;
882 } else {
769
770 toIEW->commitInfo[tid].mispredPC = fromIEW->mispredPC[tid];
771
772 if (toIEW->commitInfo[tid].branchMispredict) {
773 ++branchMispredicts;
774 }
775 }
776

--- 90 unchanged lines hidden (view full) ---

867
868 rob->retireHead(commit_thread);
869
870 ++commitSquashedInsts;
871
872 // Record that the number of ROB entries has changed.
873 changedROBNumEntries[tid] = true;
874 } else {
883 PC[tid] = head_inst->readPC();
884 nextPC[tid] = head_inst->readNextPC();
885 nextNPC[tid] = head_inst->readNextNPC();
886 nextMicroPC[tid] = head_inst->readNextMicroPC();
875 pc[tid] = head_inst->pcState();
887
888 // Increment the total number of non-speculative instructions
889 // executed.
890 // Hack for now: it really shouldn't happen until after the
891 // commit is deemed to be successful, but this count is needed
892 // for syscalls.
893 thread[tid]->funcExeInst++;
894

--- 11 unchanged lines hidden (view full) ---

906 ++commitCommittedInsts;
907
908 // To match the old model, don't count nops and instruction
909 // prefetches towards the total commit count.
910 if (!head_inst->isNop() && !head_inst->isInstPrefetch()) {
911 cpu->instDone(tid);
912 }
913
876
877 // Increment the total number of non-speculative instructions
878 // executed.
879 // Hack for now: it really shouldn't happen until after the
880 // commit is deemed to be successful, but this count is needed
881 // for syscalls.
882 thread[tid]->funcExeInst++;
883

--- 11 unchanged lines hidden (view full) ---

895 ++commitCommittedInsts;
896
897 // To match the old model, don't count nops and instruction
898 // prefetches towards the total commit count.
899 if (!head_inst->isNop() && !head_inst->isInstPrefetch()) {
900 cpu->instDone(tid);
901 }
902
914 PC[tid] = nextPC[tid];
915 nextPC[tid] = nextNPC[tid];
916 nextNPC[tid] = nextNPC[tid] + sizeof(TheISA::MachInst);
917 microPC[tid] = nextMicroPC[tid];
918 nextMicroPC[tid] = microPC[tid] + 1;
903 TheISA::advancePC(pc[tid], head_inst->staticInst);
919
920 int count = 0;
921 Addr oldpc;
922 // Debug statement. Checks to make sure we're not
923 // currently updating state while handling PC events.
924 assert(!thread[tid]->inSyscall && !thread[tid]->trapPending);
925 do {
904
905 int count = 0;
906 Addr oldpc;
907 // Debug statement. Checks to make sure we're not
908 // currently updating state while handling PC events.
909 assert(!thread[tid]->inSyscall && !thread[tid]->trapPending);
910 do {
926 oldpc = PC[tid];
911 oldpc = pc[tid].instAddr();
927 cpu->system->pcEventQueue.service(thread[tid]->getTC());
928 count++;
912 cpu->system->pcEventQueue.service(thread[tid]->getTC());
913 count++;
929 } while (oldpc != PC[tid]);
914 } while (oldpc != pc[tid].instAddr());
930 if (count > 1) {
931 DPRINTF(Commit,
932 "PC skip function event, stopping commit\n");
933 break;
934 }
935 } else {
915 if (count > 1) {
916 DPRINTF(Commit,
917 "PC skip function event, stopping commit\n");
918 break;
919 }
920 } else {
936 DPRINTF(Commit, "Unable to commit head instruction PC:%#x "
921 DPRINTF(Commit, "Unable to commit head instruction PC:%s "
937 "[tid:%i] [sn:%i].\n",
922 "[tid:%i] [sn:%i].\n",
938 head_inst->readPC(), tid ,head_inst->seqNum);
923 head_inst->pcState(), tid ,head_inst->seqNum);
939 break;
940 }
941 }
942 }
943
944 DPRINTF(CommitRate, "%i\n", num_committed);
945 numCommittedDist.sample(num_committed);
946

--- 18 unchanged lines hidden (view full) ---

965 thread[tid]->funcExeInst--;
966
967 if (head_inst->isNonSpeculative() ||
968 head_inst->isStoreConditional() ||
969 head_inst->isMemBarrier() ||
970 head_inst->isWriteBarrier()) {
971
972 DPRINTF(Commit, "Encountered a barrier or non-speculative "
924 break;
925 }
926 }
927 }
928
929 DPRINTF(CommitRate, "%i\n", num_committed);
930 numCommittedDist.sample(num_committed);
931

--- 18 unchanged lines hidden (view full) ---

950 thread[tid]->funcExeInst--;
951
952 if (head_inst->isNonSpeculative() ||
953 head_inst->isStoreConditional() ||
954 head_inst->isMemBarrier() ||
955 head_inst->isWriteBarrier()) {
956
957 DPRINTF(Commit, "Encountered a barrier or non-speculative "
973 "instruction [sn:%lli] at the head of the ROB, PC %#x.\n",
974 head_inst->seqNum, head_inst->readPC());
958 "instruction [sn:%lli] at the head of the ROB, PC %s.\n",
959 head_inst->seqNum, head_inst->pcState());
975
976 if (inst_num > 0 || iewStage->hasStoresToWB(tid)) {
977 DPRINTF(Commit, "Waiting for all stores to writeback.\n");
978 return false;
979 }
980
981 toIEW->commitInfo[tid].nonSpecSeqNum = head_inst->seqNum;
982

--- 6 unchanged lines hidden (view full) ---

989 return false;
990 } else if (head_inst->isLoad()) {
991 if (inst_num > 0 || iewStage->hasStoresToWB(tid)) {
992 DPRINTF(Commit, "Waiting for all stores to writeback.\n");
993 return false;
994 }
995
996 assert(head_inst->uncacheable());
960
961 if (inst_num > 0 || iewStage->hasStoresToWB(tid)) {
962 DPRINTF(Commit, "Waiting for all stores to writeback.\n");
963 return false;
964 }
965
966 toIEW->commitInfo[tid].nonSpecSeqNum = head_inst->seqNum;
967

--- 6 unchanged lines hidden (view full) ---

974 return false;
975 } else if (head_inst->isLoad()) {
976 if (inst_num > 0 || iewStage->hasStoresToWB(tid)) {
977 DPRINTF(Commit, "Waiting for all stores to writeback.\n");
978 return false;
979 }
980
981 assert(head_inst->uncacheable());
997 DPRINTF(Commit, "[sn:%lli]: Uncached load, PC %#x.\n",
998 head_inst->seqNum, head_inst->readPC());
982 DPRINTF(Commit, "[sn:%lli]: Uncached load, PC %s.\n",
983 head_inst->seqNum, head_inst->pcState());
999
1000 // Send back the non-speculative instruction's sequence
1001 // number. Tell the lsq to re-execute the load.
1002 toIEW->commitInfo[tid].nonSpecSeqNum = head_inst->seqNum;
1003 toIEW->commitInfo[tid].uncached = true;
1004 toIEW->commitInfo[tid].uncachedLoad = head_inst;
1005
1006 head_inst->clearCanCommit();

--- 22 unchanged lines hidden (view full) ---

1029 // Use checker prior to updating anything due to traps or PC
1030 // based events.
1031 if (cpu->checker) {
1032 cpu->checker->verify(head_inst);
1033 }
1034#endif
1035
1036 if (inst_fault != NoFault) {
984
985 // Send back the non-speculative instruction's sequence
986 // number. Tell the lsq to re-execute the load.
987 toIEW->commitInfo[tid].nonSpecSeqNum = head_inst->seqNum;
988 toIEW->commitInfo[tid].uncached = true;
989 toIEW->commitInfo[tid].uncachedLoad = head_inst;
990
991 head_inst->clearCanCommit();

--- 22 unchanged lines hidden (view full) ---

1014 // Use checker prior to updating anything due to traps or PC
1015 // based events.
1016 if (cpu->checker) {
1017 cpu->checker->verify(head_inst);
1018 }
1019#endif
1020
1021 if (inst_fault != NoFault) {
1037 DPRINTF(Commit, "Inst [sn:%lli] PC %#x has a fault\n",
1038 head_inst->seqNum, head_inst->readPC());
1022 DPRINTF(Commit, "Inst [sn:%lli] PC %s has a fault\n",
1023 head_inst->seqNum, head_inst->pcState());
1039
1040 if (iewStage->hasStoresToWB(tid) || inst_num > 0) {
1041 DPRINTF(Commit, "Stores outstanding, fault must wait.\n");
1042 return false;
1043 }
1044
1045 head_inst->setCompleted();
1046

--- 29 unchanged lines hidden (view full) ---

1076 head_inst->traceData->dump();
1077 }
1078 delete head_inst->traceData;
1079 head_inst->traceData = NULL;
1080 }
1081
1082 // Generate trap squash event.
1083 generateTrapEvent(tid);
1024
1025 if (iewStage->hasStoresToWB(tid) || inst_num > 0) {
1026 DPRINTF(Commit, "Stores outstanding, fault must wait.\n");
1027 return false;
1028 }
1029
1030 head_inst->setCompleted();
1031

--- 29 unchanged lines hidden (view full) ---

1061 head_inst->traceData->dump();
1062 }
1063 delete head_inst->traceData;
1064 head_inst->traceData = NULL;
1065 }
1066
1067 // Generate trap squash event.
1068 generateTrapEvent(tid);
1084// warn("%lli fault (%d) handled @ PC %08p", curTick, inst_fault->name(), head_inst->readPC());
1085 return false;
1086 }
1087
1088 updateComInstStats(head_inst);
1089
1090#if FULL_SYSTEM
1091 if (thread[tid]->profile) {
1069 return false;
1070 }
1071
1072 updateComInstStats(head_inst);
1073
1074#if FULL_SYSTEM
1075 if (thread[tid]->profile) {
1092// bool usermode = TheISA::inUserMode(thread[tid]->getTC());
1093// thread[tid]->profilePC = usermode ? 1 : head_inst->readPC();
1094 thread[tid]->profilePC = head_inst->readPC();
1076 thread[tid]->profilePC = head_inst->instAddr();
1095 ProfileNode *node = thread[tid]->profile->consume(thread[tid]->getTC(),
1096 head_inst->staticInst);
1097
1098 if (node)
1099 thread[tid]->profileNode = node;
1100 }
1101 if (CPA::available()) {
1102 if (head_inst->isControl()) {
1103 ThreadContext *tc = thread[tid]->getTC();
1077 ProfileNode *node = thread[tid]->profile->consume(thread[tid]->getTC(),
1078 head_inst->staticInst);
1079
1080 if (node)
1081 thread[tid]->profileNode = node;
1082 }
1083 if (CPA::available()) {
1084 if (head_inst->isControl()) {
1085 ThreadContext *tc = thread[tid]->getTC();
1104 CPA::cpa()->swAutoBegin(tc, head_inst->readNextPC());
1086 CPA::cpa()->swAutoBegin(tc, head_inst->nextInstAddr());
1105 }
1106 }
1107#endif
1108
1109 if (head_inst->traceData) {
1110 head_inst->traceData->setFetchSeq(head_inst->seqNum);
1111 head_inst->traceData->setCPSeq(thread[tid]->numInst);
1112 head_inst->traceData->dump();

--- 36 unchanged lines hidden (view full) ---

1149 inst = fromRename->insts[inst_num];
1150 ThreadID tid = inst->threadNumber;
1151
1152 if (!inst->isSquashed() &&
1153 commitStatus[tid] != ROBSquashing &&
1154 commitStatus[tid] != TrapPending) {
1155 changedROBNumEntries[tid] = true;
1156
1087 }
1088 }
1089#endif
1090
1091 if (head_inst->traceData) {
1092 head_inst->traceData->setFetchSeq(head_inst->seqNum);
1093 head_inst->traceData->setCPSeq(thread[tid]->numInst);
1094 head_inst->traceData->dump();

--- 36 unchanged lines hidden (view full) ---

1131 inst = fromRename->insts[inst_num];
1132 ThreadID tid = inst->threadNumber;
1133
1134 if (!inst->isSquashed() &&
1135 commitStatus[tid] != ROBSquashing &&
1136 commitStatus[tid] != TrapPending) {
1137 changedROBNumEntries[tid] = true;
1138
1157 DPRINTF(Commit, "Inserting PC %#x [sn:%i] [tid:%i] into ROB.\n",
1158 inst->readPC(), inst->seqNum, tid);
1139 DPRINTF(Commit, "Inserting PC %s [sn:%i] [tid:%i] into ROB.\n",
1140 inst->pcState(), inst->seqNum, tid);
1159
1160 rob->insertInst(inst);
1161
1162 assert(rob->getThreadEntries(tid) <= rob->getMaxEntries(tid));
1163
1164 youngestSeqNum[tid] = inst->seqNum;
1165 } else {
1141
1142 rob->insertInst(inst);
1143
1144 assert(rob->getThreadEntries(tid) <= rob->getMaxEntries(tid));
1145
1146 youngestSeqNum[tid] = inst->seqNum;
1147 } else {
1166 DPRINTF(Commit, "Instruction PC %#x [sn:%i] [tid:%i] was "
1148 DPRINTF(Commit, "Instruction PC %s [sn:%i] [tid:%i] was "
1167 "squashed, skipping.\n",
1149 "squashed, skipping.\n",
1168 inst->readPC(), inst->seqNum, tid);
1150 inst->pcState(), inst->seqNum, tid);
1169 }
1170 }
1171}
1172
1173template <class Impl>
1174void
1175DefaultCommit<Impl>::skidInsert()
1176{
1177 DPRINTF(Commit, "Attempting to any instructions from rename into "
1178 "skidBuffer.\n");
1179
1180 for (int inst_num = 0; inst_num < fromRename->size; ++inst_num) {
1181 DynInstPtr inst = fromRename->insts[inst_num];
1182
1183 if (!inst->isSquashed()) {
1151 }
1152 }
1153}
1154
1155template <class Impl>
1156void
1157DefaultCommit<Impl>::skidInsert()
1158{
1159 DPRINTF(Commit, "Attempting to any instructions from rename into "
1160 "skidBuffer.\n");
1161
1162 for (int inst_num = 0; inst_num < fromRename->size; ++inst_num) {
1163 DynInstPtr inst = fromRename->insts[inst_num];
1164
1165 if (!inst->isSquashed()) {
1184 DPRINTF(Commit, "Inserting PC %#x [sn:%i] [tid:%i] into ",
1185 "skidBuffer.\n", inst->readPC(), inst->seqNum,
1166 DPRINTF(Commit, "Inserting PC %s [sn:%i] [tid:%i] into ",
1167 "skidBuffer.\n", inst->pcState(), inst->seqNum,
1186 inst->threadNumber);
1187 skidBuffer.push(inst);
1188 } else {
1168 inst->threadNumber);
1169 skidBuffer.push(inst);
1170 } else {
1189 DPRINTF(Commit, "Instruction PC %#x [sn:%i] [tid:%i] was "
1171 DPRINTF(Commit, "Instruction PC %s [sn:%i] [tid:%i] was "
1190 "squashed, skipping.\n",
1172 "squashed, skipping.\n",
1191 inst->readPC(), inst->seqNum, inst->threadNumber);
1173 inst->pcState(), inst->seqNum, inst->threadNumber);
1192 }
1193 }
1194}
1195
1196template <class Impl>
1197void
1198DefaultCommit<Impl>::markCompletedInsts()
1199{
1200 // Grab completed insts out of the IEW instruction queue, and mark
1201 // instructions completed within the ROB.
1202 for (int inst_num = 0;
1203 inst_num < fromIEW->size && fromIEW->insts[inst_num];
1204 ++inst_num)
1205 {
1206 if (!fromIEW->insts[inst_num]->isSquashed()) {
1174 }
1175 }
1176}
1177
1178template <class Impl>
1179void
1180DefaultCommit<Impl>::markCompletedInsts()
1181{
1182 // Grab completed insts out of the IEW instruction queue, and mark
1183 // instructions completed within the ROB.
1184 for (int inst_num = 0;
1185 inst_num < fromIEW->size && fromIEW->insts[inst_num];
1186 ++inst_num)
1187 {
1188 if (!fromIEW->insts[inst_num]->isSquashed()) {
1207 DPRINTF(Commit, "[tid:%i]: Marking PC %#x, [sn:%lli] ready "
1189 DPRINTF(Commit, "[tid:%i]: Marking PC %s, [sn:%lli] ready "
1208 "within ROB.\n",
1209 fromIEW->insts[inst_num]->threadNumber,
1190 "within ROB.\n",
1191 fromIEW->insts[inst_num]->threadNumber,
1210 fromIEW->insts[inst_num]->readPC(),
1192 fromIEW->insts[inst_num]->pcState(),
1211 fromIEW->insts[inst_num]->seqNum);
1212
1213 // Mark the instruction as ready to commit.
1214 fromIEW->insts[inst_num]->setCanCommit();
1215 }
1216 }
1217}
1218

--- 165 unchanged lines hidden ---
1193 fromIEW->insts[inst_num]->seqNum);
1194
1195 // Mark the instruction as ready to commit.
1196 fromIEW->insts[inst_num]->setCanCommit();
1197 }
1198 }
1199}
1200

--- 165 unchanged lines hidden ---