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,6 +162,8 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
{
int selectedReg = BitUtils.HighestBitSet(intFreeRegisters & ~regMasks.IntCallerSavedRegisters);
if (selectedReg >= 0)
{
int mask = 1 << selectedReg;
intFreeRegisters &= ~mask;
@ -172,10 +174,13 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
intReservedCount++;
}
}
else if (!info.Type.IsInteger() && vecReservedCount < 7)
{
int selectedReg = BitUtils.HighestBitSet(vecFreeRegisters & ~regMasks.VecCallerSavedRegisters);
if (selectedReg >= 0)
{
int mask = 1 << selectedReg;
vecFreeRegisters &= ~mask;
@ -186,6 +191,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
vecReservedCount++;
}
}
if (intReservedCount + vecReservedCount == 14)
{