inst_queue_impl.hh (5100:7a0180040755) inst_queue_impl.hh (5327:3390941f0643)
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;

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

662 iewStage->wakeCPU();
663
664 if (fu_idx > -1)
665 fuPool->freeUnitNextCycle(fu_idx);
666
667 // @todo: Ensure that these FU Completions happen at the beginning
668 // of a cycle, otherwise they could add too many instructions to
669 // the queue.
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;

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

662 iewStage->wakeCPU();
663
664 if (fu_idx > -1)
665 fuPool->freeUnitNextCycle(fu_idx);
666
667 // @todo: Ensure that these FU Completions happen at the beginning
668 // of a cycle, otherwise they could add too many instructions to
669 // the queue.
670 issueToExecuteQueue->access(0)->size++;
670 issueToExecuteQueue->access(-1)->size++;
671 instsToExecute.push_back(inst);
672}
673
674// @todo: Figure out a better way to remove the squashed items from the
675// lists. Checking the top item of each list to see if it's squashed
676// wastes time and forces jumps.
677template <class Impl>
678void

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

747 if (idx >= 0)
748 fuPool->freeUnitNextCycle(idx);
749 } else {
750 int issue_latency = fuPool->getIssueLatency(op_class);
751 // Generate completion event for the FU
752 FUCompletion *execution = new FUCompletion(issuing_inst,
753 idx, this);
754
671 instsToExecute.push_back(inst);
672}
673
674// @todo: Figure out a better way to remove the squashed items from the
675// lists. Checking the top item of each list to see if it's squashed
676// wastes time and forces jumps.
677template <class Impl>
678void

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

747 if (idx >= 0)
748 fuPool->freeUnitNextCycle(idx);
749 } else {
750 int issue_latency = fuPool->getIssueLatency(op_class);
751 // Generate completion event for the FU
752 FUCompletion *execution = new FUCompletion(issuing_inst,
753 idx, this);
754
755 execution->schedule(curTick + cpu->ticks(issue_latency - 1));
755 execution->schedule(curTick + cpu->ticks(op_latency - 1));
756
757 // @todo: Enforce that issue_latency == 1 or op_latency
758 if (issue_latency > 1) {
759 // If FU isn't pipelined, then it must be freed
760 // upon the execution completing.
761 execution->setFreeFU();
762 } else {
763 // Add the FU onto the list of FU's to be freed next cycle.

--- 645 unchanged lines hidden ---
756
757 // @todo: Enforce that issue_latency == 1 or op_latency
758 if (issue_latency > 1) {
759 // If FU isn't pipelined, then it must be freed
760 // upon the execution completing.
761 execution->setFreeFU();
762 } else {
763 // Add the FU onto the list of FU's to be freed next cycle.

--- 645 unchanged lines hidden ---