Ensure that the selected register is valid on the hybrid allocator

This commit is contained in:
gdk 2019-08-01 23:43:59 -03:00
commit 90605fcbe0

View file

@ -162,29 +162,35 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
{ {
int selectedReg = BitUtils.HighestBitSet(intFreeRegisters & ~regMasks.IntCallerSavedRegisters); int selectedReg = BitUtils.HighestBitSet(intFreeRegisters & ~regMasks.IntCallerSavedRegisters);
int mask = 1 << selectedReg; if (selectedReg >= 0)
{
int mask = 1 << selectedReg;
intFreeRegisters &= ~mask; intFreeRegisters &= ~mask;
intUsedRegisters |= mask; intUsedRegisters |= mask;
info.PreAllocated = true; info.PreAllocated = true;
info.Register = selectedReg; info.Register = selectedReg;
intReservedCount++; intReservedCount++;
}
} }
else if (!info.Type.IsInteger() && vecReservedCount < 7) else if (!info.Type.IsInteger() && vecReservedCount < 7)
{ {
int selectedReg = BitUtils.HighestBitSet(vecFreeRegisters & ~regMasks.VecCallerSavedRegisters); int selectedReg = BitUtils.HighestBitSet(vecFreeRegisters & ~regMasks.VecCallerSavedRegisters);
int mask = 1 << selectedReg; if (selectedReg >= 0)
{
int mask = 1 << selectedReg;
vecFreeRegisters &= ~mask; vecFreeRegisters &= ~mask;
vecUsedRegisters |= mask; vecUsedRegisters |= mask;
info.PreAllocated = true; info.PreAllocated = true;
info.Register = selectedReg; info.Register = selectedReg;
vecReservedCount++; vecReservedCount++;
}
} }
if (intReservedCount + vecReservedCount == 14) if (intReservedCount + vecReservedCount == 14)