i386: Correction to GetIntRegisterBetween to ensure we only get 8-bit registers that we can actually encode

This commit is contained in:
J. Gareth "Curious Kit" Moreton 2021-12-24 01:41:09 +00:00 committed by FPK
parent 1da7ce46de
commit 683a92bcc8

View File

@ -1073,7 +1073,15 @@ unit aoptx86;
for CurrentSuperReg in RegSet do
begin
CurrentReg := newreg(R_INTREGISTER, TSuperRegister(CurrentSuperReg), RegSize);
if not AUsedRegs[R_INTREGISTER].IsUsed(CurrentReg) then
if not AUsedRegs[R_INTREGISTER].IsUsed(CurrentReg)
{$if defined(i386) or defined(i8086)}
{ If the target size is 8-bit, make sure we can actually encode it }
and (
(RegSize >= R_SUBW) or { Not R_SUBL or R_SUBH }
(GetSupReg(CurrentReg) in [RS_EAX,RS_EBX,RS_ECX,RS_EDX])
)
{$endif i386 or i8086}
then
begin
Currentp := p;
Breakout := False;