inst_queue_impl.hh (10797:855cafd64da1) inst_queue_impl.hh (10807:dac26eb4cb64)
1/*
2 * Copyright (c) 2011-2014 ARM Limited
3 * Copyright (c) 2013 Advanced Micro Devices, Inc.
4 * All rights reserved.
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating

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

820 i2e_info->size++;
821 instsToExecute.push_back(issuing_inst);
822
823 // Add the FU onto the list of FU's to be freed next
824 // cycle if we used one.
825 if (idx >= 0)
826 fuPool->freeUnitNextCycle(idx);
827 } else {
1/*
2 * Copyright (c) 2011-2014 ARM Limited
3 * Copyright (c) 2013 Advanced Micro Devices, Inc.
4 * All rights reserved.
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating

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

820 i2e_info->size++;
821 instsToExecute.push_back(issuing_inst);
822
823 // Add the FU onto the list of FU's to be freed next
824 // cycle if we used one.
825 if (idx >= 0)
826 fuPool->freeUnitNextCycle(idx);
827 } else {
828 Cycles issue_latency = fuPool->getIssueLatency(op_class);
828 bool pipelined = fuPool->isPipelined(op_class);
829 // Generate completion event for the FU
830 ++wbOutstanding;
831 FUCompletion *execution = new FUCompletion(issuing_inst,
832 idx, this);
833
834 cpu->schedule(execution,
835 cpu->clockEdge(Cycles(op_latency - 1)));
836
829 // Generate completion event for the FU
830 ++wbOutstanding;
831 FUCompletion *execution = new FUCompletion(issuing_inst,
832 idx, this);
833
834 cpu->schedule(execution,
835 cpu->clockEdge(Cycles(op_latency - 1)));
836
837 // @todo: Enforce that issue_latency == 1 or op_latency
838 if (issue_latency > Cycles(1)) {
837 if (!pipelined) {
839 // If FU isn't pipelined, then it must be freed
840 // upon the execution completing.
841 execution->setFreeFU();
842 } else {
843 // Add the FU onto the list of FU's to be freed next cycle.
844 fuPool->freeUnitNextCycle(idx);
845 }
846 }

--- 729 unchanged lines hidden ---
838 // If FU isn't pipelined, then it must be freed
839 // upon the execution completing.
840 execution->setFreeFU();
841 } else {
842 // Add the FU onto the list of FU's to be freed next cycle.
843 fuPool->freeUnitNextCycle(idx);
844 }
845 }

--- 729 unchanged lines hidden ---