Jonas Maebe 26 years ago
parent
commit
4e6bcf9ed7
1 changed files with 32 additions and 14 deletions
  1. 32 14
      compiler/popt386.pas

+ 32 - 14
compiler/popt386.pas

@@ -808,27 +808,39 @@ Begin
                                               Dispose(hp2,Done);
                                             End
                                           Else
+                                            If (Pai386(p)^.oper[1].reg <> Pai386(hp2)^.oper[1].reg) And 
+                                               not(RegInRef(Pai386(p)^.oper[1].reg,Pai386(p)^.oper[0].ref^)) And
+                                               not(RegInRef(Pai386(hp2)^.oper[1].reg,Pai386(hp2)^.oper[0].ref^))
+                                              Then
                                  {   mov mem1, reg1         mov mem1, reg1
                                      mov reg1, mem2         mov reg1, mem2
                                      mov mem2, reg2         mov mem2, reg1
                                   to:                    to:
                                      mov mem1, reg1         mov mem1, reg1
                                      mov mem1, reg2         mov reg1, mem2
-                                     mov reg1, mem2}
-                                            Begin
-                                              If (Pai386(p)^.oper[1].reg <> Pai386(hp2)^.oper[1].reg) Then
-                                                Begin
-                                                  Pai386(hp1)^.LoadRef(0,newreference(Pai386(p)^.oper[0].ref^));
-                                                  Pai386(hp1)^.LoadReg(1,Pai386(hp2)^.oper[1].reg);
-                                                End
+                                     mov reg1, mem2
+
+                               or (if mem1 depends on reg1
+                                   and/or if mem2 depends on reg2)
+                                  to:
+                                     mov mem1, reg1
+                                     mov reg1, mem2
+                                     mov reg1, reg2
+                               }
+                                              Begin
+                                                Pai386(hp1)^.LoadRef(0,newreference(Pai386(p)^.oper[0].ref^));
+                                                Pai386(hp1)^.LoadReg(1,Pai386(hp2)^.oper[1].reg);
+                                                Pai386(hp2)^.LoadRef(1,newreference(Pai386(hp2)^.oper[0].ref^));
+                                                Pai386(hp2)^.LoadReg(0,Pai386(p)^.oper[1].reg);
+                                              End
+                                            Else
+                                              If (Pai386(hp1)^.Oper[0].reg <> Pai386(hp2)^.Oper[1].reg) Then
+                                                Pai386(hp2)^.LoadReg(0,Pai386(hp1)^.Oper[0].reg)
                                               Else
                                                 Begin
-                                                  AsmL^.Remove(hp1);
-                                                  Dispose(hp1, Done)
-                                                End;
-                                              Pai386(hp2)^.LoadRef(1,newreference(Pai386(hp2)^.oper[0].ref^));
-                                              Pai386(hp2)^.LoadReg(0,Pai386(p)^.oper[1].reg);
-                                            End;
+                                                  AsmL^.Remove(hp2);
+                                                  Dispose(hp2, Done);
+                                                End
                                   End;
                             End
                           Else
@@ -1521,7 +1533,13 @@ End.
 
 {
  $Log$
- Revision 1.55  1999-06-18 09:55:31  peter
+ Revision 1.56  1999-06-23 12:33:52  jonas
+   * merged
+
+ Revision 1.54.2.2  1999/06/23 11:55:08  jonas
+   * fixed bug in "mov mem1,reg1;mov reg1,mem2;mov mem2,reg2" optimization
+
+ Revision 1.55  1999/06/18 09:55:31  peter
    * merged
 
  Revision 1.54.2.1  1999/06/18 09:52:40  peter