src/Sim/Predictor/DepPred/RegDepPred/RegDepPredBase.cpp

説明を見る。
00001 // 
00002 // Copyright (c) 2005-2008 Kenichi Watanabe.
00003 // Copyright (c) 2005-2008 Yasuhiro Watari.
00004 // Copyright (c) 2005-2008 Hironori Ichibayashi.
00005 // Copyright (c) 2008-2009 Kazuo Horio.
00006 // Copyright (c) 2009-2013 Naruki Kurata.
00007 // Copyright (c) 2005-2013 Ryota Shioya.
00008 // Copyright (c) 2005-2013 Masahiro Goshima.
00009 // 
00010 // This software is provided 'as-is', without any express or implied
00011 // warranty. In no event will the authors be held liable for any damages
00012 // arising from the use of this software.
00013 // 
00014 // Permission is granted to anyone to use this software for any purpose,
00015 // including commercial applications, and to alter it and redistribute it
00016 // freely, subject to the following restrictions:
00017 // 
00018 // 1. The origin of this software must not be misrepresented; you must not
00019 // claim that you wrote the original software. If you use this software
00020 // in a product, an acknowledgment in the product documentation would be
00021 // appreciated but is not required.
00022 // 
00023 // 2. Altered source versions must be plainly marked as such, and must not be
00024 // misrepresented as being the original software.
00025 // 
00026 // 3. This notice may not be removed or altered from any source
00027 // distribution.
00028 // 
00029 // 
00030 
00031 
00032 #include <pch.h>
00033 
00034 #include "Sim/Predictor/DepPred/RegDepPred/RegDepPredBase.h"
00035 #include "Sim/Op/Op.h"
00036 
00037 using namespace Onikiri;
00038 
00039 RegDepPredBase::RegDepPredBase()
00040 {
00041 }
00042 
00043 RegDepPredBase::~RegDepPredBase()
00044 {
00045 }
00046 
00047 
00048 // WAopZbg
00049 // ResolveRegタ
00050 void RegDepPredBase::Resolve(OpIterator op)
00051 {
00052     OpInfo* opInfo = op->GetOpInfo();
00053     int srcNum = opInfo->GetSrcNum();
00054     for(int i = 0; i < srcNum; ++i) {
00055         int operand = opInfo->GetSrcOperand(i);
00056         
00057         if( operand == -1 ) {
00058             continue;
00059         }
00060 
00061         int phyRegNo = ResolveReg(operand);
00062         op->SetSrcReg(i, phyRegNo);
00063     }
00064 }
00065 
00066 // VWX^CX^XAopZbg
00067 // resolve L AllocateReg タ
00068 void RegDepPredBase::Allocate(OpIterator op)
00069 {
00070     OpInfo* opInfo = op->GetOpInfo();
00071     int dstNum = opInfo->GetDstNum();
00072     for(int i = 0; i < dstNum; ++i) {
00073         int operand = opInfo->GetDstOperand(i);
00074         
00075         if( operand == -1 ) {
00076             continue;
00077         }
00078 
00079         int phyRegNo = AllocateReg(op,operand);
00080         op->SetDstReg(i, phyRegNo);
00081     }
00082 }
00083 
00084 // CommitA_WX^OfXeBl[VEWX^
00085 void RegDepPredBase::Commit(OpIterator op)
00086 {
00087     OpInfo* opInfo = op->GetOpInfo();
00088     int dstNum = opInfo->GetDstNum();
00089     for(int i = 0; i < dstNum; ++i) {
00090         int operand = opInfo->GetDstOperand(i);
00091         ReleaseReg(op, operand, op->GetDstReg(i));
00092     }
00093 }
00094 
00095 // OptbVOpゥgfXeBl[VEWX^
00096 void RegDepPredBase::Flush(OpIterator op)
00097 {
00098     if( op->GetStatus() == OpStatus::OS_FETCH ){
00099         return;
00100     }
00101     OpInfo* opInfo = op->GetOpInfo();
00102     int dstNum = opInfo->GetDstNum();
00103     for(int i = 0; i < dstNum; ++i) {
00104         int operand = opInfo->GetDstOperand(i);
00105         DeallocateReg(op, operand, op->GetDstReg(i));
00106     }
00107 }

Onikiri2に対してTue Jun 18 14:34:25 2013に生成されました。  doxygen 1.4.7