* avoid overflow during register allocation

git-svn-id: trunk@49285 -
This commit is contained in:
florian 2021-04-28 18:32:48 +00:00
parent 72667f41ad
commit 837b433abc

View File

@ -2846,8 +2846,10 @@ unit rgobj;
set weigth of the newly allocated register higher than the old one,
so it will selected for spilling with a lower priority than
the original one, this prevents an endless spilling loop if orgreg
is short living, see e.g. tw25164.pp }
add_reg_instruction(instr,loadreg,reginfo[orgreg].weight+1);
is short living, see e.g. tw25164.pp
the min trick is needed to avoid an overflow in case weight=high(weight which might happen }
add_reg_instruction(instr,loadreg,min(high(reginfo[orgreg].weight)-1,reginfo[orgreg].weight)+1);
ungetregisterinline(list,loadreg);
end;
end;
@ -2878,8 +2880,10 @@ unit rgobj;
set weigth of the newly allocated register higher than the old one,
so it will selected for spilling with a lower priority than
the original one, this prevents an endless spilling loop if orgreg
is short living, see e.g. tw25164.pp }
add_reg_instruction(instr,storereg,reginfo[orgreg].weight+1);
is short living, see e.g. tw25164.pp
the min trick is needed to avoid an overflow in case weight=high(weight which might happen }
add_reg_instruction(instr,storereg,min(high(reginfo[orgreg].weight)-1,reginfo[orgreg].weight)+1);
end;
end;