mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 02:39:40 +01:00 
			
		
		
		
	+ mov reg, mem1 to mov reg, mem1
mov mem2, reg           cmp reg, mem2
     cmp mem1, reg
    # reg released
			
			
This commit is contained in:
		
							parent
							
								
									bd95a2d64e
								
							
						
					
					
						commit
						0d51aa650c
					
				@ -786,25 +786,53 @@ Begin
 | 
			
		||||
                                  TmpBool1 := RefsEqual(TReference(Pai386(hp1)^.op2^), TReference(Pai386(p)^.op1^))
 | 
			
		||||
                                Else
 | 
			
		||||
                                  TmpBool1 := Pai386(hp1)^.op2 = Pai386(p)^.op1;
 | 
			
		||||
                              If TmpBool1
 | 
			
		||||
                                Then
 | 
			
		||||
                              If TmpBool1 Then
 | 
			
		||||
                            {mov reg1, mem1     or     mov mem1, reg1
 | 
			
		||||
                             mov mem2, reg1            mov reg2, mem1}
 | 
			
		||||
                                  Begin
 | 
			
		||||
                                    If (Pai386(hp1)^.op1t = top_ref)
 | 
			
		||||
                                      Then
 | 
			
		||||
                                        TmpBool1 := RefsEqual(TReference(Pai386(hp1)^.op1^),
 | 
			
		||||
                                                              TReference(Pai386(p)^.op2^))
 | 
			
		||||
                                      Else TmpBool1 := (Pai386(hp1)^.op1 = Pai386(p)^.op2);
 | 
			
		||||
                                   If TmpBool1 Then
 | 
			
		||||
                                Begin
 | 
			
		||||
                                  If (Pai386(hp1)^.op1t = top_ref) Then
 | 
			
		||||
                                    TmpBool1 := RefsEqual(TReference(Pai386(hp1)^.op1^),
 | 
			
		||||
                                                          TReference(Pai386(p)^.op2^))
 | 
			
		||||
                                  Else TmpBool1 := (Pai386(hp1)^.op1 = Pai386(p)^.op2);
 | 
			
		||||
                                  If TmpBool1 Then
 | 
			
		||||
                        { Removes the second statement from
 | 
			
		||||
                            mov reg1, mem1
 | 
			
		||||
                            mov mem1, reg1 }
 | 
			
		||||
                                      Begin
 | 
			
		||||
                                        AsmL^.remove(hp1);
 | 
			
		||||
                                        Dispose(hp1,done);
 | 
			
		||||
                                      End;
 | 
			
		||||
                                  End
 | 
			
		||||
                                    Begin
 | 
			
		||||
                                      AsmL^.remove(hp1);
 | 
			
		||||
                                      Dispose(hp1,done);
 | 
			
		||||
                                    End
 | 
			
		||||
                                  Else
 | 
			
		||||
                                    Begin
 | 
			
		||||
                                      TmpUsedRegs := UsedRegs;
 | 
			
		||||
                                      UpdateUsedRegs(TmpUsedRegs, Pai(hp1^.next));
 | 
			
		||||
                                      If (Pai386(p)^.op1t = top_reg) And
 | 
			
		||||
                                        { mov reg1, mem1
 | 
			
		||||
                                          mov mem2, reg1 }
 | 
			
		||||
                                         GetNextInstruction(hp1, hp2) And
 | 
			
		||||
                                         (hp2^.typ = ait_instruction) And
 | 
			
		||||
                                         (Pai386(hp2)^._operator = A_CMP) And
 | 
			
		||||
                                         (Pai386(hp2)^.Op1t = TOp_Ref) And
 | 
			
		||||
                                         (Pai386(hp2)^.Op2t = TOp_Reg) And
 | 
			
		||||
                                         RefsEqual(TReference(Pai386(hp2)^.Op1^),
 | 
			
		||||
                                                   TReference(Pai386(p)^.Op2^)) And
 | 
			
		||||
                                         (Pai386(hp2)^.Op2 = Pai386(p)^.Op1) And
 | 
			
		||||
                                         Not(RegUsedAfterInstruction(TRegister(Pai386(p)^.Op1),
 | 
			
		||||
                                                hp2, TmpUsedRegs)) Then
 | 
			
		||||
                           { change                   to
 | 
			
		||||
                              mov reg1, mem1           mov reg1, mem1
 | 
			
		||||
                              mov mem2, reg1           cmp reg1, mem2
 | 
			
		||||
                              cmp mem1, reg1                          }
 | 
			
		||||
                                        Begin
 | 
			
		||||
                                          AsmL^.Remove(hp2);
 | 
			
		||||
                                          Dispose(hp2, Done);
 | 
			
		||||
                                          Pai386(hp1)^._operator := A_CMP;
 | 
			
		||||
                                          Pai386(hp1)^.Opxt := top_reg + top_ref shl 4;
 | 
			
		||||
                                          Pai386(hp1)^.Op2 := Pai386(hp1)^.Op1;
 | 
			
		||||
                                          Pai386(hp1)^.Op1 := Pai386(p)^.Op1
 | 
			
		||||
                                        End;
 | 
			
		||||
                                    End;
 | 
			
		||||
                                End
 | 
			
		||||
                                Else
 | 
			
		||||
                                  Begin
 | 
			
		||||
                                    If GetNextInstruction(hp1, hp2) And
 | 
			
		||||
@ -1591,7 +1619,13 @@ End.
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
 $Log$
 | 
			
		||||
 Revision 1.35  1999-01-04 12:58:55  jonas
 | 
			
		||||
 Revision 1.36  1999-01-04 22:04:15  jonas
 | 
			
		||||
   + mov reg, mem1    to    mov reg, mem1
 | 
			
		||||
      mov mem2, reg           cmp reg, mem2
 | 
			
		||||
      cmp mem1, reg
 | 
			
		||||
     # reg released
 | 
			
		||||
 | 
			
		||||
 Revision 1.35  1999/01/04 12:58:55  jonas
 | 
			
		||||
   * no fistp/fild optimization for S_IQ (fistq doesn't exist)
 | 
			
		||||
 | 
			
		||||
 Revision 1.34  1998/12/29 18:48:17  jonas
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user