Browse Source

* fixed refaddr bug that caused go32v2 cycle failure

Jonas Maebe 21 years ago
parent
commit
74836e0d0d
1 changed files with 8 additions and 2 deletions
  1. 8 2
      compiler/i386/popt386.pas

+ 8 - 2
compiler/i386/popt386.pas

@@ -1033,6 +1033,7 @@ begin
                                       if (taicpu(p).oper[1]^.typ = top_ref) and
                                         { mov reg1, mem1
                                           mov mem2, reg1 }
+                                         (taicpu(hp1).oper[0]^.ref^.refaddr = addr_no) and
                                          GetNextInstruction(hp1, hp2) and
                                          (hp2.typ = ait_instruction) and
                                          (taicpu(hp2).opcode = A_CMP) and
@@ -1623,7 +1624,9 @@ procedure PeepHoleOptPass2(asml: taasmoutput; BlockStart, BlockEnd: tai);
        CanBeCMOV:=assigned(p) and (p.typ=ait_instruction) and
          (taicpu(p).opcode=A_MOV) and
          (taicpu(p).opsize in [S_L,S_W]) and
-         (taicpu(p).oper[0]^.typ in [top_reg,top_ref]) and
+         ((taicpu(p).oper[0]^.typ = top_reg) or
+          ((taicpu(p).oper[0]^.typ = top_ref) and
+           (taicpu(p).oper[0]^.ref^.refaddr = addr_no))) and
          (taicpu(p).oper[1]^.typ in [top_reg]);
     end;
 
@@ -1999,7 +2002,10 @@ end.
 
 {
   $Log$
-  Revision 1.58  2004-02-28 16:59:02  jonas
+  Revision 1.59  2004-03-14 18:42:32  jonas
+    * fixed refaddr bug that caused go32v2 cycle failure
+
+  Revision 1.58  2004/02/28 16:59:02  jonas
     * fixed bug in ref_addr changes
 
   Revision 1.57  2004/02/27 10:21:05  florian