Deleted Added
sdiff udiff text old ( 13557:fc33e6048b25 ) new ( 13610:5d5404ac6288 )
full compact
1/*
2 * Copyright (c) 2016 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

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

65{
66 private:
67
68 typedef TheISA::CCReg CCReg;
69 using VecElem = TheISA::VecElem;
70 using VecRegContainer = TheISA::VecRegContainer;
71 using PhysIds = std::vector<PhysRegId>;
72 using VecMode = Enums::VecRegRenameMode;
73 public:
74 using IdRange = std::pair<PhysIds::const_iterator,
75 PhysIds::const_iterator>;
76 private:
77 static constexpr auto NumVecElemPerVecReg = TheISA::NumVecElemPerVecReg;
78
79 /** Integer register file. */
80 std::vector<RegVal> intRegFile;
81 std::vector<PhysRegId> intRegIds;
82
83 /** Floating point register file. */
84 std::vector<RegVal> floatRegFile;
85 std::vector<PhysRegId> floatRegIds;
86
87 /** Vector register file. */
88 std::vector<VecRegContainer> vectorRegFile;
89 std::vector<PhysRegId> vecRegIds;
90 std::vector<PhysRegId> vecElemIds;
91
92 /** Condition-code register file. */
93 std::vector<CCReg> ccRegFile;
94 std::vector<PhysRegId> ccRegIds;
95
96 /** Misc Reg Ids */
97 std::vector<PhysRegId> miscRegIds;
98
99 /**

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

112 unsigned numPhysicalVecRegs;
113
114 /**
115 * Number of physical vector element registers
116 */
117 unsigned numPhysicalVecElemRegs;
118
119 /**
120 * Number of physical CC registers
121 */
122 unsigned numPhysicalCCRegs;
123
124 /** Total number of physical registers. */
125 unsigned totalNumRegs;
126
127 /** Mode in which vector registers are addressed. */
128 VecMode vecMode;
129
130 public:
131 /**
132 * Constructs a physical register file with the specified amount of
133 * integer and floating point registers.
134 */
135 PhysRegFile(unsigned _numPhysicalIntRegs,
136 unsigned _numPhysicalFloatRegs,
137 unsigned _numPhysicalVecRegs,
138 unsigned _numPhysicalCCRegs,
139 VecMode vmode
140 );
141
142 /**
143 * Destructor to free resources
144 */
145 ~PhysRegFile() {}
146
147 /** Initialize the free list */
148 void initFreeList(UnifiedFreeList *freeList);
149
150 /** @return the number of integer physical registers. */
151 unsigned numIntPhysRegs() const { return numPhysicalIntRegs; }
152
153 /** @return the number of floating-point physical registers. */
154 unsigned numFloatPhysRegs() const { return numPhysicalFloatRegs; }
155 /** @return the number of vector physical registers. */
156 unsigned numVecPhysRegs() const { return numPhysicalVecRegs; }
157
158 /** @return the number of vector physical registers. */
159 unsigned numVecElemPhysRegs() const { return numPhysicalVecElemRegs; }
160
161 /** @return the number of condition-code physical registers. */
162 unsigned numCCPhysRegs() const { return numPhysicalCCRegs; }
163
164 /** @return the total number of physical registers. */

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

196 /** Reads a vector register. */
197 const VecRegContainer &
198 readVecReg(PhysRegIdPtr phys_reg) const
199 {
200 assert(phys_reg->isVectorPhysReg());
201
202 DPRINTF(IEW, "RegFile: Access to vector register %i, has "
203 "data %s\n", int(phys_reg->index()),
204 vectorRegFile[phys_reg->index()].as<VecElem>().print());
205
206 return vectorRegFile[phys_reg->index()];
207 }
208
209 /** Reads a vector register for modification. */
210 VecRegContainer &
211 getWritableVecReg(PhysRegIdPtr phys_reg)
212 {

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

253 const VecElem& val = ret[phys_reg->elemIndex()];
254 DPRINTF(IEW, "RegFile: Access to element %d of vector register %i,"
255 " has data %#x\n", phys_reg->elemIndex(),
256 int(phys_reg->index()), val);
257
258 return val;
259 }
260
261 /** Reads a condition-code register. */
262 CCReg
263 readCCReg(PhysRegIdPtr phys_reg)
264 {
265 assert(phys_reg->isCCPhysReg());
266
267 DPRINTF(IEW, "RegFile: Access to cc register %i, has "
268 "data %#x\n", phys_reg->index(),

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

316
317 DPRINTF(IEW, "RegFile: Setting element %d of vector register %i to"
318 " %#x\n", phys_reg->elemIndex(), int(phys_reg->index()), val);
319
320 vectorRegFile[phys_reg->index()].as<VecElem>()[phys_reg->elemIndex()] =
321 val;
322 }
323
324 /** Sets a condition-code register to the given value. */
325 void
326 setCCReg(PhysRegIdPtr phys_reg, CCReg val)
327 {
328 assert(phys_reg->isCCPhysReg());
329
330 DPRINTF(IEW, "RegFile: Setting cc register %i to %#x\n",
331 phys_reg->index(), (uint64_t)val);

--- 26 unchanged lines hidden ---