regfile.hh (9915:d9e3ad574162) regfile.hh (9919:803903a8dac1)
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

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

38#include "arch/isa_traits.hh"
39#include "arch/kernel_stats.hh"
40#include "arch/types.hh"
41#include "base/trace.hh"
42#include "config/the_isa.hh"
43#include "cpu/o3/comm.hh"
44#include "debug/IEW.hh"
45
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

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

38#include "arch/isa_traits.hh"
39#include "arch/kernel_stats.hh"
40#include "arch/types.hh"
41#include "base/trace.hh"
42#include "config/the_isa.hh"
43#include "cpu/o3/comm.hh"
44#include "debug/IEW.hh"
45
46class UnifiedFreeList;
47
46/**
47 * Simple physical register file class.
48 */
49class PhysRegFile
50{
51 private:
52
53 typedef TheISA::IntReg IntReg;
54 typedef TheISA::FloatReg FloatReg;
55 typedef TheISA::FloatRegBits FloatRegBits;
56
57 typedef union {
58 FloatReg d;
59 FloatRegBits q;
60 } PhysFloatReg;
61
62 /** Integer register file. */
48/**
49 * Simple physical register file class.
50 */
51class PhysRegFile
52{
53 private:
54
55 typedef TheISA::IntReg IntReg;
56 typedef TheISA::FloatReg FloatReg;
57 typedef TheISA::FloatRegBits FloatRegBits;
58
59 typedef union {
60 FloatReg d;
61 FloatRegBits q;
62 } PhysFloatReg;
63
64 /** Integer register file. */
63 IntReg *intRegFile;
65 std::vector<IntReg> intRegFile;
64
65 /** Floating point register file. */
66
67 /** Floating point register file. */
66 PhysFloatReg *floatRegFile;
68 std::vector<PhysFloatReg> floatRegFile;
67
68 /**
69 * The first floating-point physical register index. The physical
70 * register file has a single continuous index space, with the
71 * initial indices mapping to the integer registers, followed
72 * immediately by the floating-point registers. Thus the first
73 * floating-point index is equal to the number of integer
74 * registers.
69
70 /**
71 * The first floating-point physical register index. The physical
72 * register file has a single continuous index space, with the
73 * initial indices mapping to the integer registers, followed
74 * immediately by the floating-point registers. Thus the first
75 * floating-point index is equal to the number of integer
76 * registers.
77 *
78 * Note that this internal organizational detail on how physical
79 * register file indices are ordered should *NOT* be exposed
80 * outside of this class. Other classes can use the is*PhysReg()
81 * methods to map from a physical register index to a class
82 * without knowing the internal structure of the index map.
75 */
76 unsigned baseFloatRegIndex;
77
78 /** Total number of physical registers. */
79 unsigned totalNumRegs;
80
81 public:
82 /**
83 * Constructs a physical register file with the specified amount of
84 * integer and floating point registers.
85 */
86 PhysRegFile(unsigned _numPhysicalIntRegs,
87 unsigned _numPhysicalFloatRegs);
88
89 /**
90 * Destructor to free resources
91 */
83 */
84 unsigned baseFloatRegIndex;
85
86 /** Total number of physical registers. */
87 unsigned totalNumRegs;
88
89 public:
90 /**
91 * Constructs a physical register file with the specified amount of
92 * integer and floating point registers.
93 */
94 PhysRegFile(unsigned _numPhysicalIntRegs,
95 unsigned _numPhysicalFloatRegs);
96
97 /**
98 * Destructor to free resources
99 */
92 ~PhysRegFile();
100 ~PhysRegFile() {}
93
101
102 /** Initialize the free list */
103 void initFreeList(UnifiedFreeList *freeList);
104
94 /** @return the number of integer physical registers. */
95 unsigned numIntPhysRegs() const { return baseFloatRegIndex; }
96
97 /** @return the number of floating-point physical registers. */
98 unsigned numFloatPhysRegs() const
99 { return totalNumRegs - baseFloatRegIndex; }
100
101 /** @return the total number of physical registers. */

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

198 int(reg_idx), (uint64_t)val);
199
200 floatRegFile[reg_offset].q = val;
201 }
202
203};
204
205
105 /** @return the number of integer physical registers. */
106 unsigned numIntPhysRegs() const { return baseFloatRegIndex; }
107
108 /** @return the number of floating-point physical registers. */
109 unsigned numFloatPhysRegs() const
110 { return totalNumRegs - baseFloatRegIndex; }
111
112 /** @return the total number of physical registers. */

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

209 int(reg_idx), (uint64_t)val);
210
211 floatRegFile[reg_offset].q = val;
212 }
213
214};
215
216
206inline
207PhysRegFile::PhysRegFile(unsigned _numPhysicalIntRegs,
208 unsigned _numPhysicalFloatRegs)
209 : baseFloatRegIndex(_numPhysicalIntRegs),
210 totalNumRegs(_numPhysicalIntRegs + _numPhysicalFloatRegs)
211{
212 intRegFile = new IntReg[_numPhysicalIntRegs];
213 floatRegFile = new PhysFloatReg[_numPhysicalFloatRegs];
214
215 memset(intRegFile, 0, sizeof(IntReg) * _numPhysicalIntRegs);
216 memset(floatRegFile, 0, sizeof(PhysFloatReg) * _numPhysicalFloatRegs);
217}
218
219
220inline
221PhysRegFile::~PhysRegFile()
222{
223 delete intRegFile;
224 delete floatRegFile;
225}
226
227#endif //__CPU_O3_REGFILE_HH__
217#endif //__CPU_O3_REGFILE_HH__