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