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__ |