gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
regfile.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2004-2005 The Regents of The University of Michigan
3  * Copyright (c) 2013 Advanced Micro Devices, Inc.
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
12  * documentation and/or other materials provided with the distribution;
13  * neither the name of the copyright holders nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  *
29  * Authors: Kevin Lim
30  * Gabe Black
31  * Steve Reinhardt
32  */
33 
34 #include "cpu/o3/regfile.hh"
35 
36 #include "cpu/o3/free_list.hh"
37 
38 PhysRegFile::PhysRegFile(unsigned _numPhysicalIntRegs,
39  unsigned _numPhysicalFloatRegs,
40  unsigned _numPhysicalCCRegs)
41  : intRegFile(_numPhysicalIntRegs),
42  floatRegFile(_numPhysicalFloatRegs),
43  ccRegFile(_numPhysicalCCRegs),
44  baseFloatRegIndex(_numPhysicalIntRegs),
45  baseCCRegIndex(_numPhysicalIntRegs + _numPhysicalFloatRegs),
46  totalNumRegs(_numPhysicalIntRegs
47  + _numPhysicalFloatRegs
48  + _numPhysicalCCRegs)
49 {
50  if (TheISA::NumCCRegs == 0 && _numPhysicalCCRegs != 0) {
51  // Just make this a warning and go ahead and allocate them
52  // anyway, to keep from having to add checks everywhere
53  warn("Non-zero number of physical CC regs specified, even though\n"
54  " ISA does not use them.\n");
55  }
56 }
57 
58 
59 void
61 {
62  // Initialize the free lists.
63  PhysRegIndex reg_idx = 0;
64 
65  // The initial batch of registers are the integer ones
66  while (reg_idx < baseFloatRegIndex) {
67  freeList->addIntReg(reg_idx++);
68  }
69 
70  // The next batch of the registers are the floating-point physical
71  // registers; put them onto the floating-point free list.
72  while (reg_idx < baseCCRegIndex) {
73  freeList->addFloatReg(reg_idx++);
74  }
75 
76  // The rest of the registers are the condition-code physical
77  // registers; put them onto the condition-code free list.
78  while (reg_idx < totalNumRegs) {
79  freeList->addCCReg(reg_idx++);
80  }
81 }
void addIntReg(PhysRegIndex freed_reg)
Adds an integer register back to the free list.
Definition: free_list.hh:155
unsigned totalNumRegs
Total number of physical registers.
Definition: regfile.hh:97
unsigned baseFloatRegIndex
The first floating-point physical register index.
Definition: regfile.hh:88
#define warn(...)
Definition: misc.hh:219
void initFreeList(UnifiedFreeList *freeList)
Initialize the free list.
Definition: regfile.cc:60
const int NumCCRegs
Definition: registers.hh:97
PhysRegFile(unsigned _numPhysicalIntRegs, unsigned _numPhysicalFloatRegs, unsigned _numPhysicalCCRegs)
Constructs a physical register file with the specified amount of integer and floating point registers...
Definition: regfile.cc:38
unsigned baseCCRegIndex
The first condition-code physical register index.
Definition: regfile.hh:94
FreeList class that simply holds the list of free integer and floating point registers.
Definition: free_list.hh:95
short int PhysRegIndex
Definition: comm.hh:57
void addCCReg(PhysRegIndex freed_reg)
Adds a cc register back to the free list.
Definition: free_list.hh:161
void addFloatReg(PhysRegIndex freed_reg)
Adds a fp register back to the free list.
Definition: free_list.hh:158

Generated on Fri Jun 9 2017 13:03:44 for gem5 by doxygen 1.8.6