commit_impl.hh (5529:9ae69b9cd7fd) commit_impl.hh (5557:03c186e416aa)
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;

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

809 // ROB is empty, b) there are no outstanding stores, c) IEW
810 // stage has received any information regarding stores that
811 // committed.
812 // c) is checked by making sure to not consider the ROB empty
813 // on the same cycle as when stores have been committed.
814 // @todo: Make this handle multi-cycle communication between
815 // commit and IEW.
816 if (checkEmptyROB[tid] && rob->isEmpty(tid) &&
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;

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

809 // ROB is empty, b) there are no outstanding stores, c) IEW
810 // stage has received any information regarding stores that
811 // committed.
812 // c) is checked by making sure to not consider the ROB empty
813 // on the same cycle as when stores have been committed.
814 // @todo: Make this handle multi-cycle communication between
815 // commit and IEW.
816 if (checkEmptyROB[tid] && rob->isEmpty(tid) &&
817 !iewStage->hasStoresToWB() && !committedStores[tid]) {
817 !iewStage->hasStoresToWB(tid) && !committedStores[tid]) {
818 checkEmptyROB[tid] = false;
819 toIEW->commitInfo[tid].usedROB = true;
820 toIEW->commitInfo[tid].emptyROB = true;
821 toIEW->commitInfo[tid].freeROBEntries = rob->numFreeEntries(tid);
822 wroteToTimeBuffer = true;
823 }
824
825 }

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

963 head_inst->isStoreConditional() ||
964 head_inst->isMemBarrier() ||
965 head_inst->isWriteBarrier()) {
966
967 DPRINTF(Commit, "Encountered a barrier or non-speculative "
968 "instruction [sn:%lli] at the head of the ROB, PC %#x.\n",
969 head_inst->seqNum, head_inst->readPC());
970
818 checkEmptyROB[tid] = false;
819 toIEW->commitInfo[tid].usedROB = true;
820 toIEW->commitInfo[tid].emptyROB = true;
821 toIEW->commitInfo[tid].freeROBEntries = rob->numFreeEntries(tid);
822 wroteToTimeBuffer = true;
823 }
824
825 }

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

963 head_inst->isStoreConditional() ||
964 head_inst->isMemBarrier() ||
965 head_inst->isWriteBarrier()) {
966
967 DPRINTF(Commit, "Encountered a barrier or non-speculative "
968 "instruction [sn:%lli] at the head of the ROB, PC %#x.\n",
969 head_inst->seqNum, head_inst->readPC());
970
971 if (inst_num > 0 || iewStage->hasStoresToWB()) {
971 if (inst_num > 0 || iewStage->hasStoresToWB(tid)) {
972 DPRINTF(Commit, "Waiting for all stores to writeback.\n");
973 return false;
974 }
975
976 toIEW->commitInfo[tid].nonSpecSeqNum = head_inst->seqNum;
977
978 // Change the instruction so it won't try to commit again until
979 // it is executed.
980 head_inst->clearCanCommit();
981
982 ++commitNonSpecStalls;
983
984 return false;
985 } else if (head_inst->isLoad()) {
972 DPRINTF(Commit, "Waiting for all stores to writeback.\n");
973 return false;
974 }
975
976 toIEW->commitInfo[tid].nonSpecSeqNum = head_inst->seqNum;
977
978 // Change the instruction so it won't try to commit again until
979 // it is executed.
980 head_inst->clearCanCommit();
981
982 ++commitNonSpecStalls;
983
984 return false;
985 } else if (head_inst->isLoad()) {
986 if (inst_num > 0 || iewStage->hasStoresToWB()) {
986 if (inst_num > 0 || iewStage->hasStoresToWB(tid)) {
987 DPRINTF(Commit, "Waiting for all stores to writeback.\n");
988 return false;
989 }
990
991 assert(head_inst->uncacheable());
992 DPRINTF(Commit, "[sn:%lli]: Uncached load, PC %#x.\n",
993 head_inst->seqNum, head_inst->readPC());
994

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

1033 // possibly needing it for its fault.
1034 thread[tid]->setInst(
1035 static_cast<TheISA::MachInst>(head_inst->staticInst->machInst));
1036
1037 if (inst_fault != NoFault) {
1038 DPRINTF(Commit, "Inst [sn:%lli] PC %#x has a fault\n",
1039 head_inst->seqNum, head_inst->readPC());
1040
987 DPRINTF(Commit, "Waiting for all stores to writeback.\n");
988 return false;
989 }
990
991 assert(head_inst->uncacheable());
992 DPRINTF(Commit, "[sn:%lli]: Uncached load, PC %#x.\n",
993 head_inst->seqNum, head_inst->readPC());
994

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

1033 // possibly needing it for its fault.
1034 thread[tid]->setInst(
1035 static_cast<TheISA::MachInst>(head_inst->staticInst->machInst));
1036
1037 if (inst_fault != NoFault) {
1038 DPRINTF(Commit, "Inst [sn:%lli] PC %#x has a fault\n",
1039 head_inst->seqNum, head_inst->readPC());
1040
1041 if (iewStage->hasStoresToWB() || inst_num > 0) {
1041 if (iewStage->hasStoresToWB(tid) || inst_num > 0) {
1042 DPRINTF(Commit, "Stores outstanding, fault must wait.\n");
1043 return false;
1044 }
1045
1046 head_inst->setCompleted();
1047
1048#if USE_CHECKER
1049 if (cpu->checker && head_inst->isStore()) {

--- 327 unchanged lines hidden ---
1042 DPRINTF(Commit, "Stores outstanding, fault must wait.\n");
1043 return false;
1044 }
1045
1046 head_inst->setCompleted();
1047
1048#if USE_CHECKER
1049 if (cpu->checker && head_inst->isStore()) {

--- 327 unchanged lines hidden ---