#include <RegisterFile.h>
Onikiri::RegisterFileに対する継承グラフ
Public メソッド | |
BEGIN_PARAM_MAP (GetParamPath()) RegisterFile() | |
int | GetCapacity (int segment) const |
PhyReg * | GetPhyReg (int phyRegNo) const |
size_t | GetSegmentCount () const |
int | GetTotalCapacity () const |
void | Initialize (InitPhase phase) |
PhyReg * | operator[] (int phyRegNo) const |
void | SetPhyReg (int phyRegNo, PhyReg *phyReg) |
virtual | ~RegisterFile () |
RegisterFile.h の 43 行で定義されています。
RegisterFile::~RegisterFile | ( | ) | [virtual] |
RegisterFile.cpp の 50 行で定義されています。
参照先 Onikiri::PhysicalResourceNode::ReleaseParam().
00051 { 00052 for (int i = 0; i < m_totalCapacity; i++) { 00053 delete m_register[i]; 00054 } 00055 ReleaseParam(); 00056 }
関数の呼び出しグラフ:
Onikiri::RegisterFile::BEGIN_PARAM_MAP | ( | GetParamPath() | ) |
int RegisterFile::GetCapacity | ( | int | segment | ) | const |
RegisterFile.cpp の 122 行で定義されています。
参照先 ASSERT.
00123 { 00124 ASSERT(segment >= 0 && segment < static_cast<int>(m_capacity.size()), 00125 "unknown segment %d", segment); 00126 return m_capacity[segment]; 00127 }
PhyReg * RegisterFile::GetPhyReg | ( | int | phyRegNo | ) | const |
RegisterFile.cpp の 98 行で定義されています。
参照先 ASSERT.
参照元 Onikiri::Op::GetPhyReg()・operator[]()・Onikiri::InorderSystem::Run()・Onikiri::SystemManager::SetSimulationContext().
00099 { 00100 ASSERT(phyRegNo >= 0 && phyRegNo < m_totalCapacity, 00101 "illegal phyRegNo %d.", phyRegNo); 00102 return m_register[phyRegNo]; 00103 }
Here is the caller graph for this function:
size_t RegisterFile::GetSegmentCount | ( | ) | const |
int RegisterFile::GetTotalCapacity | ( | ) | const |
RegisterFile.cpp の 129 行で定義されています。
参照元 Onikiri::RMT::Initialize()・Onikiri::SystemManager::SetSimulationContext().
Here is the caller graph for this function:
void RegisterFile::Initialize | ( | InitPhase | phase | ) |
RegisterFile.cpp の 58 行で定義されています。
参照先 Onikiri::PhysicalResourceNode::CheckNodeInitialized()・Onikiri::EmulatorIF::GetISAInfo()・Onikiri::Core::GetNumScheduler()・Onikiri::ISAInfoIF::GetRegisterSegmentCount()・Onikiri::PhysicalResourceNode::INIT_POST_CONNECTION・Onikiri::PhysicalResourceNode::INIT_PRE_CONNECTION・Onikiri::ParamExchange::LoadParam()・THROW_RUNTIME_ERROR.
00059 { 00060 if(phase == INIT_PRE_CONNECTION){ 00061 LoadParam(); 00062 } 00063 else if(phase == INIT_POST_CONNECTION){ 00064 // member `FbN 00065 CheckNodeInitialized( "core", m_core ); 00066 CheckNodeInitialized( "emulator", m_emulator ); 00067 00068 // Check the physical register configuration. 00069 ISAInfoIF* isaInfo = m_emulator->GetISAInfo(); 00070 if( (size_t)isaInfo->GetRegisterSegmentCount() != m_capacity.size() ){ 00071 THROW_RUNTIME_ERROR( 00072 "The specified number of the physical register segments (%d) " 00073 "and that of the logical register segments defined by the ISA (%d) " 00074 "do not match in the configuration XML. Check the configuration " 00075 "of the physical registers and the ISA.", 00076 m_capacity.size(), 00077 isaInfo->GetRegisterSegmentCount() 00078 ); 00079 } 00080 00081 // SWX^KvvZ 00082 m_totalCapacity = 0; 00083 for(int i = 0; i < static_cast<int>(m_capacity.size()); ++i) { 00084 m_totalCapacity += m_capacity[i]; 00085 } 00086 00087 // WX^m 00088 int schedulerCount = m_core->GetNumScheduler(); 00089 m_register.resize(m_totalCapacity, 0); 00090 for (int i = 0; i < m_totalCapacity; i++) { 00091 PhyReg* reg = new PhyReg(schedulerCount, i); 00092 reg->Clear(); 00093 m_register[i] = reg; 00094 } 00095 } 00096 }
関数の呼び出しグラフ:
PhyReg * RegisterFile::operator[] | ( | int | phyRegNo | ) | const |
RegisterFile.cpp の 105 行で定義されています。
参照先 GetPhyReg().
00106 { 00107 return GetPhyReg(phyRegNo); 00108 }
関数の呼び出しグラフ:
void RegisterFile::SetPhyReg | ( | int | phyRegNo, | |
PhyReg * | phyReg | |||
) |
RegisterFile.cpp の 110 行で定義されています。
参照先 ASSERT.
00111 { 00112 ASSERT(phyRegNo >= 0 && phyRegNo < m_totalCapacity, 00113 "illegal phyRegNo %d.", phyRegNo); 00114 m_register[phyRegNo] = phyReg; 00115 }