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 |
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. */ |
65 std::vector<IntReg> intRegFile; |
66 67 /** Floating point register file. */ |
68 std::vector<PhysFloatReg> floatRegFile; |
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. |
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 */ |
100 ~PhysRegFile() {} |
101 |
102 /** Initialize the free list */ 103 void initFreeList(UnifiedFreeList *freeList); 104 |
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 |
217#endif //__CPU_O3_REGFILE_HH__ |