* x86_64: Bug fix in "PrePeepholeOptSxx" where shifts greater than or equal to 32 weren't handled correctly

This commit is contained in:
J. Gareth "Curious Kit" Moreton 2025-04-03 18:56:42 +01:00 committed by J. Gareth "Kit" Moreton
parent fc43e66f05
commit 3f66d043f8

View File

@ -1753,7 +1753,15 @@ unit aoptx86;
OpsEqual(taicpu(hp1).oper[1]^, taicpu(p).oper[1]^) then
begin
if (taicpu(p).oper[0]^.val > taicpu(hp1).oper[0]^.val) and
not(cs_opt_size in current_settings.optimizerswitches) then
not(cs_opt_size in current_settings.optimizerswitches)
{$ifdef x86_64}
and (
(taicpu(p).opsize <> S_Q) or
{ 64-bit AND can only store signed 32-bit immediates }
(taicpu(p).oper[0]^.val < 32)
)
{$endif x86_64}
then
begin
{ shr/sar const1, %reg
shl const2, %reg
@ -1772,7 +1780,15 @@ unit aoptx86;
end;
end
else if (taicpu(p).oper[0]^.val<taicpu(hp1).oper[0]^.val) and
not(cs_opt_size in current_settings.optimizerswitches) then
not(cs_opt_size in current_settings.optimizerswitches)
{$ifdef x86_64}
and (
(taicpu(p).opsize <> S_Q) or
{ 64-bit AND can only store signed 32-bit immediates }
(taicpu(p).oper[0]^.val < 32)
)
{$endif x86_64}
then
begin
{ shr/sar const1, %reg
shl const2, %reg
@ -1790,7 +1806,15 @@ unit aoptx86;
Internalerror(2017050702)
end;
end
else if (taicpu(p).oper[0]^.val = taicpu(hp1).oper[0]^.val) then
else if (taicpu(p).oper[0]^.val = taicpu(hp1).oper[0]^.val)
{$ifdef x86_64}
and (
(taicpu(p).opsize <> S_Q) or
{ 64-bit AND can only store signed 32-bit immediates }
(taicpu(p).oper[0]^.val < 32)
)
{$endif x86_64}
then
begin
{ shr/sar const1, %reg
shl const2, %reg