Ensure that the selected register is valid on the hybrid allocator
This commit is contained in:
parent
a1a589d31e
commit
90605fcbe0
1 changed files with 18 additions and 12 deletions
|
@ -162,6 +162,8 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
|
||||||
{
|
{
|
||||||
int selectedReg = BitUtils.HighestBitSet(intFreeRegisters & ~regMasks.IntCallerSavedRegisters);
|
int selectedReg = BitUtils.HighestBitSet(intFreeRegisters & ~regMasks.IntCallerSavedRegisters);
|
||||||
|
|
||||||
|
if (selectedReg >= 0)
|
||||||
|
{
|
||||||
int mask = 1 << selectedReg;
|
int mask = 1 << selectedReg;
|
||||||
|
|
||||||
intFreeRegisters &= ~mask;
|
intFreeRegisters &= ~mask;
|
||||||
|
@ -172,10 +174,13 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
|
if (selectedReg >= 0)
|
||||||
|
{
|
||||||
int mask = 1 << selectedReg;
|
int mask = 1 << selectedReg;
|
||||||
|
|
||||||
vecFreeRegisters &= ~mask;
|
vecFreeRegisters &= ~mask;
|
||||||
|
@ -186,6 +191,7 @@ namespace ARMeilleure.CodeGen.RegisterAllocators
|
||||||
|
|
||||||
vecReservedCount++;
|
vecReservedCount++;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (intReservedCount + vecReservedCount == 14)
|
if (intReservedCount + vecReservedCount == 14)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue