* strip segment overrides, for segments, which should be equal in the current

model to the default segment of the reference in optimize_ref, when
  inlineasm=false

git-svn-id: trunk@37511 -
This commit is contained in:
nickysn 2017-10-23 15:51:33 +00:00
parent d220d6f2c6
commit 875339993f

View File

@ -1878,7 +1878,9 @@ implementation
else
ss_equals_ds:=segment_regs_equal(NR_DS,NR_SS);
{ remove redundant segment overrides }
if (ref.segment<>NR_NO) and (ref.segment=get_default_segment_of_ref(ref)) then
if (ref.segment<>NR_NO) and
((inlineasm and (ref.segment=get_default_segment_of_ref(ref))) or
((not inlineasm) and (segment_regs_equal(ref.segment,get_default_segment_of_ref(ref))))) then
ref.segment:=NR_NO;
if not is_16_bit_ref(ref) then
begin
@ -1906,7 +1908,9 @@ implementation
end;
end;
{ remove redundant segment overrides again }
if (ref.segment<>NR_NO) and (ref.segment=get_default_segment_of_ref(ref)) then
if (ref.segment<>NR_NO) and
((inlineasm and (ref.segment=get_default_segment_of_ref(ref))) or
((not inlineasm) and (segment_regs_equal(ref.segment,get_default_segment_of_ref(ref))))) then
ref.segment:=NR_NO;
end;