* corrected small syntax error in part between {ifdef ver0_99_11}

+ added fistp/fild optimization between {ifdef ver0_99_11}
This commit is contained in:
Jonas Maebe 1998-12-09 18:16:13 +00:00
parent 957fdc1f2d
commit 2fcfb2ce50

View File

@ -314,12 +314,25 @@ Begin
End
End
End;
A_FSTP:
A_FSTP
{$IfDef Ver0_99_11}
,A_FISTP
{$EndIf Ver0_99_11}
:
Begin
If (Pai386(p)^.op1t = top_ref) And
GetNextInstruction(p, hp1) And
(Pai(hp1)^.typ = ait_instruction) And
(Pai386(hp1)^._operator = A_FLD) And
{$IfDef Ver0_99_11}
((
{$EndIf Ver0_99_11}
(Pai386(hp1)^._operator = A_FLD) And
{$IfDef Ver0_99_11}
(Pai386(p)^._operator = A_FSTP)) Or
((Pai386(p)^._operator = A_FISTP) And
(Pai386(hp1)^._operator = A_FILD))) And
{$EndIf Ver0_99_11}
(Pai386(hp1)^.op1t = top_ref) And
(Pai386(hp1)^.Size = Pai386(p)^.Size) And
RefsEqual(TReference(Pai386(p)^.op1^), TReference(Pai386(hp1)^.op1^))
@ -345,7 +358,14 @@ Begin
{fst can't store an extended value!}
If (Pai386(p)^.Size <> S_FX) Then
Begin
Pai386(p)^._operator := A_FST;
{$IfDef Ver0_99_11}
If (Pai386(p)^._operator = A_FLD) Then
{$EndIf Ver0_99_11}
Pai386(p)^._operator := A_FST
{$IfDef Ver0_99_11}
Else Pai386(p)^._operator := A_FIST
{$EndIf Ver0_99_11}
;
AsmL^.Remove(hp1);
Dispose(hp1, done)
End
@ -1300,7 +1320,7 @@ Begin
GetNextInstruction(hp1, hp2) And
(hp2^.typ = ait_instruction) And
((Pai386(hp2)^._operator = A_LEAVE) or
(Pai386(hp2)^._operator = A_RET])) And
(Pai386(hp2)^._operator = A_RET)) And
(TReference(Pai386(p)^.Op1^).Base = ProcInfo.FramePointer) And
(TReference(Pai386(p)^.Op1^).Index = R_NO) And
(TReference(Pai386(p)^.Op1^).Offset >= ProcInfo.RetOffset) And
@ -1535,7 +1555,11 @@ End.
{
$Log$
Revision 1.25 1998-12-02 16:23:29 jonas
Revision 1.26 1998-12-09 18:16:13 jonas
* corrected small syntax error in part between {ifdef ver0_99_11}
+ added fistp/fild optimization between {ifdef ver0_99_11}
Revision 1.25 1998/12/02 16:23:29 jonas
* changed "if longintvar in set" to case or "if () or () .." statements
* tree.pas: changed inlinenumber (and associated constructor/vars) to a byte