free_list.cc (8232:b28d06a175be) | free_list.cc (9919:803903a8dac1) |
---|---|
1/* 2 * Copyright (c) 2004-2005 The Regents of The University of Michigan | 1/* 2 * Copyright (c) 2004-2005 The Regents of The University of Michigan |
3 * Copyright (c) 2013 Advanced Micro Devices, Inc. |
|
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; 9 * redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the --- 16 unchanged lines hidden (view full) --- 27 * 28 * Authors: Kevin Lim 29 */ 30 31#include "base/trace.hh" 32#include "cpu/o3/free_list.hh" 33#include "debug/FreeList.hh" 34 | 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer; 10 * redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the --- 16 unchanged lines hidden (view full) --- 28 * 29 * Authors: Kevin Lim 30 */ 31 32#include "base/trace.hh" 33#include "cpu/o3/free_list.hh" 34#include "debug/FreeList.hh" 35 |
35SimpleFreeList::SimpleFreeList(ThreadID activeThreads, 36 unsigned _numLogicalIntRegs, 37 unsigned _numPhysicalIntRegs, 38 unsigned _numLogicalFloatRegs, 39 unsigned _numPhysicalFloatRegs) 40 : numLogicalIntRegs(_numLogicalIntRegs), 41 numPhysicalIntRegs(_numPhysicalIntRegs), 42 numLogicalFloatRegs(_numLogicalFloatRegs), 43 numPhysicalFloatRegs(_numPhysicalFloatRegs), 44 numPhysicalRegs(numPhysicalIntRegs + numPhysicalFloatRegs) | 36UnifiedFreeList::UnifiedFreeList(const std::string &_my_name, 37 PhysRegFile *_regFile) 38 : _name(_my_name), regFile(_regFile) |
45{ 46 DPRINTF(FreeList, "Creating new free list object.\n"); 47 | 39{ 40 DPRINTF(FreeList, "Creating new free list object.\n"); 41 |
48 // Put all of the extra physical registers onto the free list. This 49 // means excluding all of the base logical registers. 50 for (PhysRegIndex i = numLogicalIntRegs * activeThreads; 51 i < numPhysicalIntRegs; ++i) 52 { 53 freeIntRegs.push(i); 54 } 55 56 // Put all of the extra physical registers onto the free list. This 57 // means excluding all of the base logical registers. Because the 58 // float registers' indices start where the physical registers end, 59 // some math must be done to determine where the free registers start. 60 PhysRegIndex i = numPhysicalIntRegs + (numLogicalFloatRegs * activeThreads); 61 62 for ( ; i < numPhysicalRegs; ++i) 63 { 64 freeFloatRegs.push(i); 65 } | 42 // Have the register file initialize the free list since it knows 43 // about its internal organization 44 regFile->initFreeList(this); |
66} | 45} |
67 68std::string 69SimpleFreeList::name() const 70{ 71 return "cpu.freelist"; 72} | |