mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 06:39:34 +02:00
- removed code not used for years
git-svn-id: trunk@43575 -
This commit is contained in:
parent
d444f750f9
commit
9e307f5c3a
@ -160,91 +160,6 @@ unit aoptcpu;
|
|||||||
A_MOVSX,
|
A_MOVSX,
|
||||||
A_MOVZX :
|
A_MOVZX :
|
||||||
Result:=OptPass1Movx(p);
|
Result:=OptPass1Movx(p);
|
||||||
(* should not be generated anymore by the current code generator
|
|
||||||
A_POP:
|
|
||||||
begin
|
|
||||||
if target_info.system=system_i386_go32v2 then
|
|
||||||
begin
|
|
||||||
{ Transform a series of pop/pop/pop/push/push/push to }
|
|
||||||
{ 'movl x(%esp),%reg' for go32v2 (not for the rest, }
|
|
||||||
{ because I'm not sure whether they can cope with }
|
|
||||||
{ 'movl x(%esp),%reg' with x > 0, I believe we had }
|
|
||||||
{ such a problem when using esp as frame pointer (JM) }
|
|
||||||
if (taicpu(p).oper[0]^.typ = top_reg) then
|
|
||||||
begin
|
|
||||||
hp1 := p;
|
|
||||||
hp2 := p;
|
|
||||||
l := 0;
|
|
||||||
while getNextInstruction(hp1,hp1) and
|
|
||||||
(hp1.typ = ait_instruction) and
|
|
||||||
(taicpu(hp1).opcode = A_POP) and
|
|
||||||
(taicpu(hp1).oper[0]^.typ = top_reg) do
|
|
||||||
begin
|
|
||||||
hp2 := hp1;
|
|
||||||
inc(l,4);
|
|
||||||
end;
|
|
||||||
getLastInstruction(p,hp3);
|
|
||||||
l1 := 0;
|
|
||||||
while (hp2 <> hp3) and
|
|
||||||
assigned(hp1) and
|
|
||||||
(hp1.typ = ait_instruction) and
|
|
||||||
(taicpu(hp1).opcode = A_PUSH) and
|
|
||||||
(taicpu(hp1).oper[0]^.typ = top_reg) and
|
|
||||||
(taicpu(hp1).oper[0]^.reg.enum = taicpu(hp2).oper[0]^.reg.enum) do
|
|
||||||
begin
|
|
||||||
{ change it to a two op operation }
|
|
||||||
taicpu(hp2).oper[1]^.typ:=top_none;
|
|
||||||
taicpu(hp2).ops:=2;
|
|
||||||
taicpu(hp2).opcode := A_MOV;
|
|
||||||
taicpu(hp2).loadoper(1,taicpu(hp1).oper[0]^);
|
|
||||||
reference_reset(tmpref);
|
|
||||||
tmpRef.base.enum:=R_INTREGISTER;
|
|
||||||
tmpRef.base.number:=NR_STACK_POINTER_REG;
|
|
||||||
convert_register_to_enum(tmpref.base);
|
|
||||||
tmpRef.offset := l;
|
|
||||||
taicpu(hp2).loadRef(0,tmpRef);
|
|
||||||
hp4 := hp1;
|
|
||||||
getNextInstruction(hp1,hp1);
|
|
||||||
asml.remove(hp4);
|
|
||||||
hp4.free;
|
|
||||||
getLastInstruction(hp2,hp2);
|
|
||||||
dec(l,4);
|
|
||||||
inc(l1);
|
|
||||||
end;
|
|
||||||
if l <> -4 then
|
|
||||||
begin
|
|
||||||
inc(l,4);
|
|
||||||
for l1 := l1 downto 1 do
|
|
||||||
begin
|
|
||||||
getNextInstruction(hp2,hp2);
|
|
||||||
dec(taicpu(hp2).oper[0]^.ref^.offset,l);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
if (taicpu(p).oper[0]^.typ = top_reg) and
|
|
||||||
GetNextInstruction(p, hp1) and
|
|
||||||
(tai(hp1).typ=ait_instruction) and
|
|
||||||
(taicpu(hp1).opcode=A_PUSH) and
|
|
||||||
(taicpu(hp1).oper[0]^.typ = top_reg) and
|
|
||||||
(taicpu(hp1).oper[0]^.reg.enum=taicpu(p).oper[0]^.reg.enum) then
|
|
||||||
begin
|
|
||||||
{ change it to a two op operation }
|
|
||||||
taicpu(p).oper[1]^.typ:=top_none;
|
|
||||||
taicpu(p).ops:=2;
|
|
||||||
taicpu(p).opcode := A_MOV;
|
|
||||||
taicpu(p).loadoper(1,taicpu(p).oper[0]^);
|
|
||||||
reference_reset(tmpref);
|
|
||||||
TmpRef.base.enum := R_ESP;
|
|
||||||
taicpu(p).loadRef(0,TmpRef);
|
|
||||||
asml.remove(hp1);
|
|
||||||
hp1.free;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
*)
|
|
||||||
A_PUSH:
|
A_PUSH:
|
||||||
begin
|
begin
|
||||||
if (taicpu(p).opsize = S_W) and
|
if (taicpu(p).opsize = S_W) and
|
||||||
|
Loading…
Reference in New Issue
Block a user