iew_impl.hh (4636:afc8da9f526e) iew_impl.hh (5215:68f719ce5496)
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;

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

924
925 // If the status was unblocking, then instructions from the skid
926 // buffer were used. Remove those instructions and handle
927 // the rest of unblocking.
928 dispatchInsts(tid);
929
930 ++iewUnblockCycles;
931
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;

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

924
925 // If the status was unblocking, then instructions from the skid
926 // buffer were used. Remove those instructions and handle
927 // the rest of unblocking.
928 dispatchInsts(tid);
929
930 ++iewUnblockCycles;
931
932 if (validInstsFromRename() && dispatchedAllInsts) {
932 if (validInstsFromRename()) {
933 // Add the current inputs to the skid buffer so they can be
934 // reprocessed when this stage unblocks.
935 skidInsert(tid);
936 }
937
938 unblock(tid);
939 }
940}
941
942template <class Impl>
943void
944DefaultIEW<Impl>::dispatchInsts(unsigned tid)
945{
933 // Add the current inputs to the skid buffer so they can be
934 // reprocessed when this stage unblocks.
935 skidInsert(tid);
936 }
937
938 unblock(tid);
939 }
940}
941
942template <class Impl>
943void
944DefaultIEW<Impl>::dispatchInsts(unsigned tid)
945{
946 dispatchedAllInsts = true;
947
948 // Obtain instructions from skid buffer if unblocking, or queue from rename
949 // otherwise.
950 std::queue<DynInstPtr> &insts_to_dispatch =
951 dispatchStatus[tid] == Unblocking ?
952 skidBuffer[tid] : insts[tid];
953
954 int insts_to_add = insts_to_dispatch.size();
955

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

1006 // Call function to start blocking.
1007 block(tid);
1008
1009 // Set unblock to false. Special case where we are using
1010 // skidbuffer (unblocking) instructions but then we still
1011 // get full in the IQ.
1012 toRename->iewUnblock[tid] = false;
1013
946 // Obtain instructions from skid buffer if unblocking, or queue from rename
947 // otherwise.
948 std::queue<DynInstPtr> &insts_to_dispatch =
949 dispatchStatus[tid] == Unblocking ?
950 skidBuffer[tid] : insts[tid];
951
952 int insts_to_add = insts_to_dispatch.size();
953

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

1004 // Call function to start blocking.
1005 block(tid);
1006
1007 // Set unblock to false. Special case where we are using
1008 // skidbuffer (unblocking) instructions but then we still
1009 // get full in the IQ.
1010 toRename->iewUnblock[tid] = false;
1011
1014 dispatchedAllInsts = false;
1015
1016 ++iewIQFullEvents;
1017 break;
1018 } else if (ldstQueue.isFull(tid)) {
1019 DPRINTF(IEW, "[tid:%i]: Issue: LSQ has become full.\n",tid);
1020
1021 // Call function to start blocking.
1022 block(tid);
1023
1024 // Set unblock to false. Special case where we are using
1025 // skidbuffer (unblocking) instructions but then we still
1026 // get full in the IQ.
1027 toRename->iewUnblock[tid] = false;
1028
1012 ++iewIQFullEvents;
1013 break;
1014 } else if (ldstQueue.isFull(tid)) {
1015 DPRINTF(IEW, "[tid:%i]: Issue: LSQ has become full.\n",tid);
1016
1017 // Call function to start blocking.
1018 block(tid);
1019
1020 // Set unblock to false. Special case where we are using
1021 // skidbuffer (unblocking) instructions but then we still
1022 // get full in the IQ.
1023 toRename->iewUnblock[tid] = false;
1024
1029 dispatchedAllInsts = false;
1030
1031 ++iewLSQFullEvents;
1032 break;
1033 }
1034
1035 // Otherwise issue the instruction just fine.
1036 if (inst->isLoad()) {
1037 DPRINTF(IEW, "[tid:%i]: Issue: Memory instruction "
1038 "encountered, adding to LSQ.\n", tid);

--- 552 unchanged lines hidden ---
1025 ++iewLSQFullEvents;
1026 break;
1027 }
1028
1029 // Otherwise issue the instruction just fine.
1030 if (inst->isLoad()) {
1031 DPRINTF(IEW, "[tid:%i]: Issue: Memory instruction "
1032 "encountered, adding to LSQ.\n", tid);

--- 552 unchanged lines hidden ---