regfile.hh revision 13501
14997Sgblack@eecs.umich.edu/* 25268Sksewell@umich.edu * Copyright (c) 2016 ARM Limited 35254Sksewell@umich.edu * All rights reserved 45254Sksewell@umich.edu * 54997Sgblack@eecs.umich.edu * The license below extends only to copyright in the software and shall 65254Sksewell@umich.edu * not be construed as granting a license to any other intellectual 75254Sksewell@umich.edu * property including but not limited to intellectual property relating 85254Sksewell@umich.edu * to a hardware implementation of the functionality of the software 95254Sksewell@umich.edu * licensed hereunder. You may use the software subject to the license 105254Sksewell@umich.edu * terms below provided that you ensure that this notice is replicated 115254Sksewell@umich.edu * unmodified and in its entirety in all distributions of the software, 125254Sksewell@umich.edu * modified or unmodified, in source code or in binary form. 135254Sksewell@umich.edu * 145254Sksewell@umich.edu * Copyright (c) 2004-2005 The Regents of The University of Michigan 155254Sksewell@umich.edu * Copyright (c) 2013 Advanced Micro Devices, Inc. 164997Sgblack@eecs.umich.edu * All rights reserved. 175254Sksewell@umich.edu * 185254Sksewell@umich.edu * Redistribution and use in source and binary forms, with or without 195254Sksewell@umich.edu * modification, are permitted provided that the following conditions are 205254Sksewell@umich.edu * met: redistributions of source code must retain the above copyright 215254Sksewell@umich.edu * notice, this list of conditions and the following disclaimer; 225254Sksewell@umich.edu * redistributions in binary form must reproduce the above copyright 235254Sksewell@umich.edu * notice, this list of conditions and the following disclaimer in the 245254Sksewell@umich.edu * documentation and/or other materials provided with the distribution; 255254Sksewell@umich.edu * neither the name of the copyright holders nor the names of its 265254Sksewell@umich.edu * contributors may be used to endorse or promote products derived from 275254Sksewell@umich.edu * this software without specific prior written permission. 284997Sgblack@eecs.umich.edu * 295268Sksewell@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 305268Sksewell@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 315268Sksewell@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 328696Sguodeyuan@tsinghua.org.cn * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 338696Sguodeyuan@tsinghua.org.cn * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 344997Sgblack@eecs.umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 354997Sgblack@eecs.umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 365222Sksewell@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 375222Sksewell@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 384997Sgblack@eecs.umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 398229Snate@binkert.org * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 408229Snate@binkert.org * 415222Sksewell@umich.edu * Authors: Kevin Lim 424997Sgblack@eecs.umich.edu * Gabe Black 435222Sksewell@umich.edu */ 445222Sksewell@umich.edu 455222Sksewell@umich.edu#ifndef __CPU_O3_REGFILE_HH__ 465222Sksewell@umich.edu#define __CPU_O3_REGFILE_HH__ 475222Sksewell@umich.edu 488232Snate@binkert.org#include <vector> 498232Snate@binkert.org 505224Sksewell@umich.edu#include "arch/isa_traits.hh" 515222Sksewell@umich.edu#include "arch/kernel_stats.hh" 528229Snate@binkert.org#include "arch/types.hh" 534997Sgblack@eecs.umich.edu#include "base/trace.hh" 545222Sksewell@umich.edu#include "config/the_isa.hh" 555222Sksewell@umich.edu#include "cpu/o3/comm.hh" 565019Sgblack@eecs.umich.edu#include "debug/IEW.hh" 575222Sksewell@umich.edu#include "enums/VecRegRenameMode.hh" 585222Sksewell@umich.edu 595222Sksewell@umich.educlass UnifiedFreeList; 605222Sksewell@umich.edu 615019Sgblack@eecs.umich.edu/** 626329Sgblack@eecs.umich.edu * Simple physical register file class. 636329Sgblack@eecs.umich.edu */ 646329Sgblack@eecs.umich.educlass PhysRegFile 656378Sgblack@eecs.umich.edu{ 666329Sgblack@eecs.umich.edu private: 676378Sgblack@eecs.umich.edu 686329Sgblack@eecs.umich.edu typedef TheISA::IntReg IntReg; 696378Sgblack@eecs.umich.edu typedef TheISA::FloatReg FloatReg; 706329Sgblack@eecs.umich.edu typedef TheISA::FloatRegBits FloatRegBits; 716329Sgblack@eecs.umich.edu typedef TheISA::CCReg CCReg; 726329Sgblack@eecs.umich.edu using VecElem = TheISA::VecElem; 736329Sgblack@eecs.umich.edu using VecRegContainer = TheISA::VecRegContainer; 746329Sgblack@eecs.umich.edu using PhysIds = std::vector<PhysRegId>; 756329Sgblack@eecs.umich.edu using VecMode = Enums::VecRegRenameMode; 766329Sgblack@eecs.umich.edu public: 775222Sksewell@umich.edu using IdRange = std::pair<PhysIds::const_iterator, 785358Sgblack@eecs.umich.edu PhysIds::const_iterator>; 795222Sksewell@umich.edu private: 806378Sgblack@eecs.umich.edu static constexpr auto NumVecElemPerVecReg = TheISA::NumVecElemPerVecReg; 816378Sgblack@eecs.umich.edu 826378Sgblack@eecs.umich.edu /** Integer register file. */ 835222Sksewell@umich.edu std::vector<IntReg> intRegFile; 845222Sksewell@umich.edu std::vector<PhysRegId> intRegIds; 855222Sksewell@umich.edu 865222Sksewell@umich.edu /** Floating point register file. */ 875222Sksewell@umich.edu std::vector<FloatRegBits> floatRegFile; 885222Sksewell@umich.edu std::vector<PhysRegId> floatRegIds; 895222Sksewell@umich.edu 905222Sksewell@umich.edu /** Vector register file. */ 915222Sksewell@umich.edu std::vector<VecRegContainer> vectorRegFile; 925222Sksewell@umich.edu std::vector<PhysRegId> vecRegIds; 935222Sksewell@umich.edu std::vector<PhysRegId> vecElemIds; 945222Sksewell@umich.edu 955222Sksewell@umich.edu /** Condition-code register file. */ 966378Sgblack@eecs.umich.edu std::vector<CCReg> ccRegFile; 975222Sksewell@umich.edu std::vector<PhysRegId> ccRegIds; 985222Sksewell@umich.edu 995222Sksewell@umich.edu /** Misc Reg Ids */ 1005222Sksewell@umich.edu std::vector<PhysRegId> miscRegIds; 1016378Sgblack@eecs.umich.edu 1025222Sksewell@umich.edu /** 1035222Sksewell@umich.edu * Number of physical general purpose registers 1045222Sksewell@umich.edu */ 1055222Sksewell@umich.edu unsigned numPhysicalIntRegs; 1065222Sksewell@umich.edu 1076378Sgblack@eecs.umich.edu /** 1086378Sgblack@eecs.umich.edu * Number of physical floating point registers 1096378Sgblack@eecs.umich.edu */ 1105222Sksewell@umich.edu unsigned numPhysicalFloatRegs; 1115222Sksewell@umich.edu 1126378Sgblack@eecs.umich.edu /** 1135222Sksewell@umich.edu * Number of physical vector registers 1145222Sksewell@umich.edu */ 1155019Sgblack@eecs.umich.edu unsigned numPhysicalVecRegs; 1165019Sgblack@eecs.umich.edu 1175222Sksewell@umich.edu /** 1185222Sksewell@umich.edu * Number of physical vector element registers 1195222Sksewell@umich.edu */ 1205222Sksewell@umich.edu unsigned numPhysicalVecElemRegs; 1215222Sksewell@umich.edu 1226378Sgblack@eecs.umich.edu /** 1236378Sgblack@eecs.umich.edu * Number of physical CC registers 1245222Sksewell@umich.edu */ 1255222Sksewell@umich.edu unsigned numPhysicalCCRegs; 1265222Sksewell@umich.edu 1275222Sksewell@umich.edu /** Total number of physical registers. */ 1285222Sksewell@umich.edu unsigned totalNumRegs; 1295222Sksewell@umich.edu 1306378Sgblack@eecs.umich.edu /** Mode in which vector registers are addressed. */ 1316378Sgblack@eecs.umich.edu VecMode vecMode; 1325222Sksewell@umich.edu 1335222Sksewell@umich.edu public: 1346378Sgblack@eecs.umich.edu /** 1355222Sksewell@umich.edu * Constructs a physical register file with the specified amount of 1365222Sksewell@umich.edu * integer and floating point registers. 1375222Sksewell@umich.edu */ 1385222Sksewell@umich.edu PhysRegFile(unsigned _numPhysicalIntRegs, 1396378Sgblack@eecs.umich.edu unsigned _numPhysicalFloatRegs, 1405222Sksewell@umich.edu unsigned _numPhysicalVecRegs, 1415222Sksewell@umich.edu unsigned _numPhysicalCCRegs, 1425222Sksewell@umich.edu VecMode vmode 1435222Sksewell@umich.edu ); 1446378Sgblack@eecs.umich.edu 1456378Sgblack@eecs.umich.edu /** 1466378Sgblack@eecs.umich.edu * Destructor to free resources 1476378Sgblack@eecs.umich.edu */ 1485222Sksewell@umich.edu ~PhysRegFile() {} 1495222Sksewell@umich.edu 1506378Sgblack@eecs.umich.edu /** Initialize the free list */ 1515222Sksewell@umich.edu void initFreeList(UnifiedFreeList *freeList); 1525222Sksewell@umich.edu 1535222Sksewell@umich.edu /** @return the number of integer physical registers. */ 1545222Sksewell@umich.edu unsigned numIntPhysRegs() const { return numPhysicalIntRegs; } 1555222Sksewell@umich.edu 1565222Sksewell@umich.edu /** @return the number of floating-point physical registers. */ 1576378Sgblack@eecs.umich.edu unsigned numFloatPhysRegs() const { return numPhysicalFloatRegs; } 1586378Sgblack@eecs.umich.edu /** @return the number of vector physical registers. */ 1595222Sksewell@umich.edu unsigned numVecPhysRegs() const { return numPhysicalVecRegs; } 1605222Sksewell@umich.edu 1616378Sgblack@eecs.umich.edu /** @return the number of vector physical registers. */ 1626378Sgblack@eecs.umich.edu unsigned numVecElemPhysRegs() const { return numPhysicalVecElemRegs; } 1636378Sgblack@eecs.umich.edu 1646378Sgblack@eecs.umich.edu /** @return the number of condition-code physical registers. */ 1656378Sgblack@eecs.umich.edu unsigned numCCPhysRegs() const { return numPhysicalCCRegs; } 1666378Sgblack@eecs.umich.edu 1676378Sgblack@eecs.umich.edu /** @return the total number of physical registers. */ 1686378Sgblack@eecs.umich.edu unsigned totalNumPhysRegs() const { return totalNumRegs; } 1695222Sksewell@umich.edu 1706378Sgblack@eecs.umich.edu /** Gets a misc register PhysRegIdPtr. */ 1716378Sgblack@eecs.umich.edu PhysRegIdPtr getMiscRegId(RegIndex reg_idx) { 1726378Sgblack@eecs.umich.edu return &miscRegIds[reg_idx]; 1735222Sksewell@umich.edu } 1746378Sgblack@eecs.umich.edu 1756378Sgblack@eecs.umich.edu /** Reads an integer register. */ 1766378Sgblack@eecs.umich.edu uint64_t readIntReg(PhysRegIdPtr phys_reg) const 1776378Sgblack@eecs.umich.edu { 1786378Sgblack@eecs.umich.edu assert(phys_reg->isIntPhysReg()); 1796378Sgblack@eecs.umich.edu 1806378Sgblack@eecs.umich.edu DPRINTF(IEW, "RegFile: Access to int register %i, has data " 1816378Sgblack@eecs.umich.edu "%#x\n", phys_reg->index(), intRegFile[phys_reg->index()]); 1826378Sgblack@eecs.umich.edu return intRegFile[phys_reg->index()]; 1836378Sgblack@eecs.umich.edu } 1846378Sgblack@eecs.umich.edu 1856378Sgblack@eecs.umich.edu FloatRegBits readFloatRegBits(PhysRegIdPtr phys_reg) const 1866378Sgblack@eecs.umich.edu { 1876378Sgblack@eecs.umich.edu assert(phys_reg->isFloatPhysReg()); 1886378Sgblack@eecs.umich.edu 1896378Sgblack@eecs.umich.edu FloatRegBits floatRegBits = floatRegFile[phys_reg->index()]; 1906378Sgblack@eecs.umich.edu 1916378Sgblack@eecs.umich.edu DPRINTF(IEW, "RegFile: Access to float register %i as int, " 1926378Sgblack@eecs.umich.edu "has data %#x\n", phys_reg->index(), 1936378Sgblack@eecs.umich.edu (uint64_t)floatRegBits); 1946378Sgblack@eecs.umich.edu 1955222Sksewell@umich.edu return floatRegBits; 1965222Sksewell@umich.edu } 1975222Sksewell@umich.edu 1985222Sksewell@umich.edu /** Reads a vector register. */ 1995222Sksewell@umich.edu const VecRegContainer& readVecReg(PhysRegIdPtr phys_reg) const 2006378Sgblack@eecs.umich.edu { 2015222Sksewell@umich.edu assert(phys_reg->isVectorPhysReg()); 2026378Sgblack@eecs.umich.edu 2035222Sksewell@umich.edu DPRINTF(IEW, "RegFile: Access to vector register %i, has " 2045222Sksewell@umich.edu "data %s\n", int(phys_reg->index()), 2055222Sksewell@umich.edu vectorRegFile[phys_reg->index()].as<VecElem>().print()); 2065222Sksewell@umich.edu 2075222Sksewell@umich.edu return vectorRegFile[phys_reg->index()]; 2085222Sksewell@umich.edu } 2096378Sgblack@eecs.umich.edu 2105222Sksewell@umich.edu /** Reads a vector register for modification. */ 2115222Sksewell@umich.edu VecRegContainer& getWritableVecReg(PhysRegIdPtr phys_reg) 2125222Sksewell@umich.edu { 2135222Sksewell@umich.edu /* const_cast for not duplicating code above. */ 2145222Sksewell@umich.edu return const_cast<VecRegContainer&>(readVecReg(phys_reg)); 2155222Sksewell@umich.edu } 2165222Sksewell@umich.edu 2175222Sksewell@umich.edu /** Reads a vector register lane. */ 2185222Sksewell@umich.edu template <typename VecElem, int LaneIdx> 2195222Sksewell@umich.edu VecLaneT<VecElem, true> 2205222Sksewell@umich.edu readVecLane(PhysRegIdPtr phys_reg) const 2215222Sksewell@umich.edu { 2225222Sksewell@umich.edu return readVecReg(phys_reg).laneView<VecElem, LaneIdx>(); 2235222Sksewell@umich.edu } 2245222Sksewell@umich.edu 2255222Sksewell@umich.edu /** Reads a vector register lane. */ 2265222Sksewell@umich.edu template <typename VecElem> 2275222Sksewell@umich.edu VecLaneT<VecElem, true> 2285222Sksewell@umich.edu readVecLane(PhysRegIdPtr phys_reg) const 2295222Sksewell@umich.edu { 2305222Sksewell@umich.edu return readVecReg(phys_reg).laneView<VecElem>(phys_reg->elemIndex()); 2315222Sksewell@umich.edu } 2325222Sksewell@umich.edu 2335222Sksewell@umich.edu /** Get a vector register lane for modification. */ 2345222Sksewell@umich.edu template <typename LD> 2355222Sksewell@umich.edu void 2365222Sksewell@umich.edu setVecLane(PhysRegIdPtr phys_reg, const LD& val) 2375222Sksewell@umich.edu { 2385222Sksewell@umich.edu assert(phys_reg->isVectorPhysReg()); 2395222Sksewell@umich.edu 2405222Sksewell@umich.edu DPRINTF(IEW, "RegFile: Setting vector register %i[%d] to %lx\n", 2415222Sksewell@umich.edu int(phys_reg->index()), phys_reg->elemIndex(), val); 2425222Sksewell@umich.edu 2435222Sksewell@umich.edu vectorRegFile[phys_reg->index()].laneView<typename LD::UnderlyingType>( 2445222Sksewell@umich.edu phys_reg->elemIndex()) = val; 2455222Sksewell@umich.edu } 2465222Sksewell@umich.edu 2475222Sksewell@umich.edu /** Reads a vector element. */ 2485222Sksewell@umich.edu const VecElem& readVecElem(PhysRegIdPtr phys_reg) const 2495222Sksewell@umich.edu { 2505222Sksewell@umich.edu assert(phys_reg->isVectorPhysElem()); 2515222Sksewell@umich.edu auto ret = vectorRegFile[phys_reg->index()].as<VecElem>(); 2525222Sksewell@umich.edu const VecElem& val = ret[phys_reg->elemIndex()]; 2535222Sksewell@umich.edu DPRINTF(IEW, "RegFile: Access to element %d of vector register %i," 2545222Sksewell@umich.edu " has data %#x\n", phys_reg->elemIndex(), 2555222Sksewell@umich.edu int(phys_reg->index()), val); 2565222Sksewell@umich.edu 2575222Sksewell@umich.edu return val; 2585222Sksewell@umich.edu } 2595222Sksewell@umich.edu 2605222Sksewell@umich.edu /** Reads a condition-code register. */ 2615222Sksewell@umich.edu CCReg readCCReg(PhysRegIdPtr phys_reg) 2625222Sksewell@umich.edu { 2635222Sksewell@umich.edu assert(phys_reg->isCCPhysReg()); 2645222Sksewell@umich.edu 2655222Sksewell@umich.edu DPRINTF(IEW, "RegFile: Access to cc register %i, has " 2665222Sksewell@umich.edu "data %#x\n", phys_reg->index(), 2675222Sksewell@umich.edu ccRegFile[phys_reg->index()]); 2685222Sksewell@umich.edu 2695222Sksewell@umich.edu return ccRegFile[phys_reg->index()]; 2705222Sksewell@umich.edu } 2715222Sksewell@umich.edu 2725222Sksewell@umich.edu /** Sets an integer register to the given value. */ 2735222Sksewell@umich.edu void setIntReg(PhysRegIdPtr phys_reg, uint64_t val) 2745222Sksewell@umich.edu { 2755222Sksewell@umich.edu assert(phys_reg->isIntPhysReg()); 2765222Sksewell@umich.edu 2775222Sksewell@umich.edu DPRINTF(IEW, "RegFile: Setting int register %i to %#x\n", 2785222Sksewell@umich.edu phys_reg->index(), val); 2795222Sksewell@umich.edu 2805222Sksewell@umich.edu if (!phys_reg->isZeroReg()) 2815222Sksewell@umich.edu intRegFile[phys_reg->index()] = val; 2825222Sksewell@umich.edu } 2835222Sksewell@umich.edu 2845222Sksewell@umich.edu void setFloatRegBits(PhysRegIdPtr phys_reg, FloatRegBits val) 2855222Sksewell@umich.edu { 2865222Sksewell@umich.edu assert(phys_reg->isFloatPhysReg()); 2875222Sksewell@umich.edu 2885222Sksewell@umich.edu DPRINTF(IEW, "RegFile: Setting float register %i to %#x\n", 2895222Sksewell@umich.edu phys_reg->index(), (uint64_t)val); 2905222Sksewell@umich.edu 2915222Sksewell@umich.edu if (!phys_reg->isZeroReg()) 2925222Sksewell@umich.edu floatRegFile[phys_reg->index()] = val; 2935222Sksewell@umich.edu } 2945222Sksewell@umich.edu 2955222Sksewell@umich.edu /** Sets a vector register to the given value. */ 2966022Sgblack@eecs.umich.edu void setVecReg(PhysRegIdPtr phys_reg, const VecRegContainer& val) 2975222Sksewell@umich.edu { 2988806Sgblack@eecs.umich.edu assert(phys_reg->isVectorPhysReg()); 2998806Sgblack@eecs.umich.edu 3005224Sksewell@umich.edu DPRINTF(IEW, "RegFile: Setting vector register %i to %s\n", 3018806Sgblack@eecs.umich.edu int(phys_reg->index()), val.print()); 3025224Sksewell@umich.edu 3038806Sgblack@eecs.umich.edu vectorRegFile[phys_reg->index()] = val; 3048806Sgblack@eecs.umich.edu } 3058806Sgblack@eecs.umich.edu 3068806Sgblack@eecs.umich.edu /** Sets a vector register to the given value. */ 3078806Sgblack@eecs.umich.edu void setVecElem(PhysRegIdPtr phys_reg, const VecElem val) 3085222Sksewell@umich.edu { 3095222Sksewell@umich.edu assert(phys_reg->isVectorPhysElem()); 3105222Sksewell@umich.edu 3116022Sgblack@eecs.umich.edu DPRINTF(IEW, "RegFile: Setting element %d of vector register %i to" 3125222Sksewell@umich.edu " %#x\n", phys_reg->elemIndex(), int(phys_reg->index()), val); 3138806Sgblack@eecs.umich.edu 3148806Sgblack@eecs.umich.edu vectorRegFile[phys_reg->index()].as<VecElem>()[phys_reg->elemIndex()] = 3158767Sgblack@eecs.umich.edu val; 3168806Sgblack@eecs.umich.edu } 3178767Sgblack@eecs.umich.edu 3188806Sgblack@eecs.umich.edu /** Sets a condition-code register to the given value. */ 3198806Sgblack@eecs.umich.edu void setCCReg(PhysRegIdPtr phys_reg, CCReg val) 3208806Sgblack@eecs.umich.edu { 3218806Sgblack@eecs.umich.edu assert(phys_reg->isCCPhysReg()); 3228806Sgblack@eecs.umich.edu 3235222Sksewell@umich.edu DPRINTF(IEW, "RegFile: Setting cc register %i to %#x\n", 3245222Sksewell@umich.edu phys_reg->index(), (uint64_t)val); 3256022Sgblack@eecs.umich.edu 3266023Snate@binkert.org ccRegFile[phys_reg->index()] = val; 3276022Sgblack@eecs.umich.edu } 3286023Snate@binkert.org 3296022Sgblack@eecs.umich.edu /** Get the PhysRegIds of the elems of a vector register. 3306022Sgblack@eecs.umich.edu * Auxiliary function to transition from Full vector mode to Elem mode. 3316023Snate@binkert.org */ 3326022Sgblack@eecs.umich.edu IdRange getRegElemIds(PhysRegIdPtr reg); 3336022Sgblack@eecs.umich.edu 3345894Sgblack@eecs.umich.edu /** 3356022Sgblack@eecs.umich.edu * Get the PhysRegIds of the elems of all vector registers. 3366023Snate@binkert.org * Auxiliary function to transition from Full vector mode to Elem mode 3375894Sgblack@eecs.umich.edu * and to initialise the rename map. 3385894Sgblack@eecs.umich.edu */ 3396023Snate@binkert.org IdRange getRegIds(RegClass cls); 3405894Sgblack@eecs.umich.edu 3415894Sgblack@eecs.umich.edu /** 3428888Sgeoffrey.blake@arm.com * Get the true physical register id. 3438888Sgeoffrey.blake@arm.com * As many parts work with PhysRegIdPtr, we need to be able to produce 3448888Sgeoffrey.blake@arm.com * the pointer out of just class and register idx. 3458888Sgeoffrey.blake@arm.com */ 3468888Sgeoffrey.blake@arm.com PhysRegIdPtr getTrueId(PhysRegIdPtr reg); 3478888Sgeoffrey.blake@arm.com}; 3488888Sgeoffrey.blake@arm.com 3499738Sandreas@sandberg.pp.se 3509738Sandreas@sandberg.pp.se#endif //__CPU_O3_REGFILE_HH__ 3519738Sandreas@sandberg.pp.se