Procházet zdrojové kódy

* use index register when available for generating a reference with
only a signle register. Using the base register could possibly
destroy the framepointer

peter před 23 roky
rodič
revize
f77536fece
2 změnil soubory, kde provedl 16 přidání a 6 odebrání
  1. 9 4
      compiler/i386/n386mem.pas
  2. 7 2
      compiler/ncgutil.pas

+ 9 - 4
compiler/i386/n386mem.pas

@@ -120,9 +120,9 @@ implementation
           end
          else
           begin
-            cg.a_loadaddr_ref_reg(exprasmlist,location.reference,location.reference.base);
-            rg.ungetregisterint(exprasmlist,location.reference.index);
-            reference_reset_base(location.reference,location.reference.base,0);
+            cg.a_loadaddr_ref_reg(exprasmlist,location.reference,location.reference.index);
+            rg.ungetregisterint(exprasmlist,location.reference.base);
+            reference_reset_base(location.reference,location.reference.index,0);
           end;
          { insert the new index register and scalefactor or
            do the multiplication manual }
@@ -156,7 +156,12 @@ begin
 end.
 {
   $Log$
-  Revision 1.42  2002-09-01 18:46:01  peter
+  Revision 1.43  2002-09-01 19:27:35  peter
+    * use index register when available for generating a reference with
+      only a signle register. Using the base register could possibly
+      destroy the framepointer
+
+  Revision 1.42  2002/09/01 18:46:01  peter
     * fixed generic tcgvecnode
     * move code that updates a reference with index register and multiplier
       to separate method so it can be overriden for scaled indexing

+ 7 - 2
compiler/ncgutil.pas

@@ -595,7 +595,7 @@ implementation
                      (l.reference.index<>R_NO)) then
                   begin
                     { load address into a single base register }
-                    if l.reference.base=R_NO then
+                    if l.reference.index<>R_NO then
                      begin
                        cg.a_loadaddr_ref_reg(list,l.reference,l.reference.index);
                        rg.ungetregister(list,l.reference.base);
@@ -1786,7 +1786,12 @@ implementation
 end.
 {
   $Log$
-  Revision 1.45  2002-09-01 18:50:20  peter
+  Revision 1.46  2002-09-01 19:27:34  peter
+    * use index register when available for generating a reference with
+      only a signle register. Using the base register could possibly
+      destroy the framepointer
+
+  Revision 1.45  2002/09/01 18:50:20  peter
     * fixed maybe_save that did not support a reference with only
       a index register. It now also updates the location with the new
       base register only