mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 07:39:25 +02:00
Appply fix from Gareth Moreton in bug report 38247
git-svn-id: trunk@47838 -
This commit is contained in:
parent
ed3741f06e
commit
2bcd2a4a93
@ -3002,6 +3002,23 @@ unit aoptx86;
|
||||
check opsize to avoid overflow when left shifting the 1 }
|
||||
if (taicpu(p).oper[0]^.typ=top_const) and (topsize2memsize[taicpu(hp2).opsize]<=63) then
|
||||
taicpu(p).oper[0]^.val:=taicpu(p).oper[0]^.val and ((qword(1) shl topsize2memsize[taicpu(hp2).opsize])-1);
|
||||
|
||||
{$ifdef x86_64}
|
||||
{ Be careful of, for example:
|
||||
movl %reg1,%reg2
|
||||
addl %reg3,%reg2
|
||||
movq %reg2,%reg4
|
||||
|
||||
This will cause problems if the upper 32-bits of %reg3 or %reg4 are non-zero
|
||||
}
|
||||
if (taicpu(hp1).opsize = S_L) and (taicpu(hp2).opsize = S_Q) then
|
||||
begin
|
||||
taicpu(hp2).changeopsize(S_L);
|
||||
setsubreg(taicpu(hp2).oper[0]^.reg, R_SUBD);
|
||||
setsubreg(taicpu(hp2).oper[1]^.reg, R_SUBD);
|
||||
end;
|
||||
{$endif x86_64}
|
||||
|
||||
taicpu(hp1).changeopsize(taicpu(hp2).opsize);
|
||||
taicpu(p).changeopsize(taicpu(hp2).opsize);
|
||||
if taicpu(p).oper[0]^.typ=top_reg then
|
||||
@ -6218,9 +6235,6 @@ unit aoptx86;
|
||||
end;
|
||||
end;
|
||||
|
||||
(* { Disabled this block because it causes IE201810201 in the m68k cross-compiler
|
||||
on x86-64 at least. Feel free to re-enable after this issue is fixed. (KB) }
|
||||
|
||||
{ Backward check to determine necessity of and %reg,%reg }
|
||||
if (taicpu(p).oper[0]^.typ = top_reg) and
|
||||
(taicpu(p).oper[0]^.reg = taicpu(p).oper[1]^.reg) and
|
||||
@ -6243,7 +6257,6 @@ unit aoptx86;
|
||||
Result := True;
|
||||
Exit;
|
||||
end;
|
||||
*)
|
||||
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user