sal: allow register sets to overlap

This allows a register to be a member of multiple UniformRegisterSets.
Needed to architecture-specifically store, e.g., a list of registers to
record in traces.

Change-Id: Ia5d20768540efe252a84df967d43e569f107da3a
This commit is contained in:
Horst Schirmeier
2013-08-23 10:39:30 +02:00
parent ff1ceeddac
commit 52723a874e
6 changed files with 33 additions and 56 deletions

View File

@ -1,15 +1,19 @@
#include <algorithm>
#include "CPU.hpp"
namespace fail {
void CPUArchitecture::m_addRegister(Register* reg)
void CPUArchitecture::m_addRegister(Register* reg, RegisterType type)
{
assert(!reg->isAssigned() && "FATAL ERROR: The register is already assigned!");
m_Registers.push_back(reg);
// 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);
}
UniformRegisterSet* urs = getRegisterSetOfType(reg->getType());
if (urs == NULL) {
urs = new UniformRegisterSet(reg->getType());
UniformRegisterSet* urs = getRegisterSetOfType(type);
if (!urs) {
urs = new UniformRegisterSet(type);
m_RegisterSubsets.push_back(urs);
}
urs->m_add(reg);
@ -34,7 +38,7 @@ UniformRegisterSet* CPUArchitecture::getRegisterSetOfType(RegisterType t) const
if ((*it)->getType() == t)
return *it;
}
return NULL;
return 0;
}
} // end-of-namespace: fail