Browse Source

* writes to register variables and to the self pointer now also count as
memore writes

Jonas Maebe 25 years ago
parent
commit
528c45c517
1 changed files with 14 additions and 4 deletions
  1. 14 4
      compiler/csopt386.pas

+ 14 - 4
compiler/csopt386.pas

@@ -69,19 +69,25 @@ begin
   for opCount := 1 to MaxCh do
   for opCount := 1 to MaxCh do
     case InsProp[p^.opcode].Ch[opCount] of
     case InsProp[p^.opcode].Ch[opCount] of
       Ch_MOp1,CH_WOp1,CH_RWOp1:
       Ch_MOp1,CH_WOp1,CH_RWOp1:
-        if p^.oper[0].typ = top_ref then
+        if (p^.oper[0].typ = top_ref) or
+           ((p^.oper[0].typ = top_reg) and
+            not(reg32(p^.oper[0].reg) in (usableregs+[R_EDI]))) then
           begin
           begin
             modifiesMemLocation := true;
             modifiesMemLocation := true;
             exit
             exit
           end;
           end;
       Ch_MOp2,CH_WOp2,CH_RWOp2:
       Ch_MOp2,CH_WOp2,CH_RWOp2:
-        if p^.oper[1].typ = top_ref then
+        if (p^.oper[1].typ = top_ref) or
+           ((p^.oper[1].typ = top_reg) and
+            not(reg32(p^.oper[1].reg) in (usableregs+[R_EDI]))) then
           begin
           begin
             modifiesMemLocation := true;
             modifiesMemLocation := true;
             exit
             exit
           end;
           end;
       Ch_MOp3,CH_WOp3,CH_RWOp3:
       Ch_MOp3,CH_WOp3,CH_RWOp3:
-        if p^.oper[2].typ = top_ref then
+        if (p^.oper[2].typ = top_ref) or
+           ((p^.oper[2].typ = top_reg) and
+            not(reg32(p^.oper[2].reg) in (usableregs+[R_EDI]))) then
           begin
           begin
             modifiesMemLocation := true;
             modifiesMemLocation := true;
             exit
             exit
@@ -1489,7 +1495,11 @@ End.
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.11  2000-09-25 09:50:29  jonas
+  Revision 1.12  2000-09-26 11:49:41  jonas
+    * writes to register variables and to the self pointer now also count as
+      memore writes
+
+  Revision 1.11  2000/09/25 09:50:29  jonas
     - removed TP conditional code
     - removed TP conditional code
 
 
   Revision 1.10  2000/09/24 15:06:14  peter
   Revision 1.10  2000/09/24 15:06:14  peter