rename_map.cc revision 12106:7784fac1b159
12929Sktlim@umich.edu/* 22929Sktlim@umich.edu * Copyright (c) 2004-2005 The Regents of The University of Michigan 32932Sktlim@umich.edu * Copyright (c) 2013 Advanced Micro Devices, Inc. 42929Sktlim@umich.edu * All rights reserved. 52929Sktlim@umich.edu * 62929Sktlim@umich.edu * Redistribution and use in source and binary forms, with or without 72929Sktlim@umich.edu * modification, are permitted provided that the following conditions are 82929Sktlim@umich.edu * met: redistributions of source code must retain the above copyright 92929Sktlim@umich.edu * notice, this list of conditions and the following disclaimer; 102929Sktlim@umich.edu * redistributions in binary form must reproduce the above copyright 112929Sktlim@umich.edu * notice, this list of conditions and the following disclaimer in the 122929Sktlim@umich.edu * documentation and/or other materials provided with the distribution; 132929Sktlim@umich.edu * neither the name of the copyright holders nor the names of its 142929Sktlim@umich.edu * contributors may be used to endorse or promote products derived from 152929Sktlim@umich.edu * this software without specific prior written permission. 162929Sktlim@umich.edu * 172929Sktlim@umich.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 182929Sktlim@umich.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 192929Sktlim@umich.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 202929Sktlim@umich.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 212929Sktlim@umich.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 222929Sktlim@umich.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 232929Sktlim@umich.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 242929Sktlim@umich.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 252929Sktlim@umich.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 262929Sktlim@umich.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 272929Sktlim@umich.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 282932Sktlim@umich.edu * 292932Sktlim@umich.edu * Authors: Kevin Lim 302932Sktlim@umich.edu */ 312929Sktlim@umich.edu 322929Sktlim@umich.edu#include "cpu/o3/rename_map.hh" 332929Sktlim@umich.edu 342929Sktlim@umich.edu#include <vector> 352929Sktlim@umich.edu 362929Sktlim@umich.edu#include "cpu/reg_class_impl.hh" 372929Sktlim@umich.edu#include "debug/Rename.hh" 382929Sktlim@umich.edu 392929Sktlim@umich.eduusing namespace std; 402929Sktlim@umich.edu 412929Sktlim@umich.edu/**** SimpleRenameMap methods ****/ 422929Sktlim@umich.edu 432929Sktlim@umich.eduSimpleRenameMap::SimpleRenameMap() 442929Sktlim@umich.edu : freeList(NULL), zeroReg(IntRegClass,0) 452929Sktlim@umich.edu{ 462929Sktlim@umich.edu} 472929Sktlim@umich.edu 482929Sktlim@umich.edu 492929Sktlim@umich.eduvoid 502929Sktlim@umich.eduSimpleRenameMap::init(unsigned size, SimpleFreeList *_freeList, 512929Sktlim@umich.edu RegIndex _zeroReg) 522929Sktlim@umich.edu{ 532929Sktlim@umich.edu assert(freeList == NULL); 542929Sktlim@umich.edu assert(map.empty()); 552929Sktlim@umich.edu 562929Sktlim@umich.edu map.resize(size); 572929Sktlim@umich.edu freeList = _freeList; 582929Sktlim@umich.edu zeroReg = RegId(IntRegClass, _zeroReg); 592929Sktlim@umich.edu} 602929Sktlim@umich.edu 612929Sktlim@umich.eduSimpleRenameMap::RenameInfo 622929Sktlim@umich.eduSimpleRenameMap::rename(const RegId& arch_reg) 632929Sktlim@umich.edu{ 643020Sstever@eecs.umich.edu PhysRegIdPtr renamed_reg; 653020Sstever@eecs.umich.edu // Record the current physical register that is renamed to the 663020Sstever@eecs.umich.edu // requested architected register. 672929Sktlim@umich.edu PhysRegIdPtr prev_reg = map[arch_reg.index()]; 682929Sktlim@umich.edu 693021Sstever@eecs.umich.edu // If it's not referencing the zero register, then rename the 702929Sktlim@umich.edu // register. 712929Sktlim@umich.edu if (arch_reg != zeroReg) { 722929Sktlim@umich.edu renamed_reg = freeList->getReg(); 732929Sktlim@umich.edu 742929Sktlim@umich.edu map[arch_reg.index()] = renamed_reg; 752929Sktlim@umich.edu } else { 762929Sktlim@umich.edu // Otherwise return the zero register so nothing bad happens. 772929Sktlim@umich.edu assert(prev_reg->isZeroReg()); 782929Sktlim@umich.edu renamed_reg = prev_reg; 792929Sktlim@umich.edu } 802929Sktlim@umich.edu 812929Sktlim@umich.edu DPRINTF(Rename, "Renamed reg %d to physical reg %d (%d) old mapping was" 822929Sktlim@umich.edu " %d (%d)\n", 832929Sktlim@umich.edu arch_reg, renamed_reg->index(), renamed_reg->flatIndex(), 842929Sktlim@umich.edu prev_reg->index(), prev_reg->flatIndex()); 852929Sktlim@umich.edu 862929Sktlim@umich.edu return RenameInfo(renamed_reg, prev_reg); 872929Sktlim@umich.edu} 882929Sktlim@umich.edu 892929Sktlim@umich.edu 902929Sktlim@umich.edu/**** UnifiedRenameMap methods ****/ 912929Sktlim@umich.edu 922929Sktlim@umich.eduvoid 932929Sktlim@umich.eduUnifiedRenameMap::init(PhysRegFile *_regFile, 942929Sktlim@umich.edu RegIndex _intZeroReg, 952929Sktlim@umich.edu RegIndex _floatZeroReg, 962929Sktlim@umich.edu UnifiedFreeList *freeList) 972929Sktlim@umich.edu{ 982929Sktlim@umich.edu regFile = _regFile; 992929Sktlim@umich.edu 1002929Sktlim@umich.edu intMap.init(TheISA::NumIntRegs, &(freeList->intList), _intZeroReg); 1012929Sktlim@umich.edu 1022929Sktlim@umich.edu floatMap.init(TheISA::NumFloatRegs, &(freeList->floatList), _floatZeroReg); 1032929Sktlim@umich.edu 1042929Sktlim@umich.edu ccMap.init(TheISA::NumCCRegs, &(freeList->ccList), (RegIndex)-1); 1052929Sktlim@umich.edu 1062929Sktlim@umich.edu} 1072929Sktlim@umich.edu 1082929Sktlim@umich.edu