From 3bf64351a4d104da06e90f5709b78b705578d88e Mon Sep 17 00:00:00 2001 From: Richard Hellwig Date: Fri, 1 Nov 2013 17:26:26 +0100 Subject: [PATCH] core/sal: register issue fixed Before, it was not possible to add registers in arbitrary order. Change-Id: I952c03ea4339da2cdaf34bd4546c76c33cecd4cd --- src/core/sal/CPU.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/sal/CPU.cc b/src/core/sal/CPU.cc index 815c9f54..675853ab 100644 --- a/src/core/sal/CPU.cc +++ b/src/core/sal/CPU.cc @@ -7,9 +7,10 @@ void CPUArchitecture::m_addRegister(Register* reg, RegisterType type) { // We may be called multiple times with the same register, if it needs to // reside in multiple subsets. - if (std::find(m_Registers.begin(), m_Registers.end(), reg) == m_Registers.end()) { - m_Registers.push_back(reg); + if ((m_Registers.size()) < reg->getId()+1) { + m_Registers.resize(reg->getId()+1); } + m_Registers[reg->getId()] = reg; UniformRegisterSet* urs = getRegisterSetOfType(type); if (!urs) { @@ -21,7 +22,7 @@ void CPUArchitecture::m_addRegister(Register* reg, RegisterType type) Register* CPUArchitecture::getRegister(size_t i) const { - assert(i < m_Registers.size() && "FATAL ERROR: Invalid index provided!"); + assert(i < m_Registers.size() && m_Registers[i] != NULL && "FATAL ERROR: Invalid index provided!"); assert(m_Registers[i]->getId() == i && "FATAL ERROR: Register index mismatch"); return m_Registers[i]; }