Browse Source

* 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

peter 23 years ago
parent
commit
5a06f334b7
1 changed files with 18 additions and 2 deletions
  1. 18 2
      compiler/ncgutil.pas

+ 18 - 2
compiler/ncgutil.pas

@@ -595,7 +595,18 @@ implementation
                      (l.reference.index<>R_NO)) then
                   begin
                     { load address into a single base register }
-                    cg.a_loadaddr_ref_reg(list,l.reference,l.reference.base);
+                    if l.reference.base=R_NO then
+                     begin
+                       cg.a_loadaddr_ref_reg(list,l.reference,l.reference.index);
+                       rg.ungetregister(list,l.reference.base);
+                       reference_reset_base(l.reference,l.reference.index,0);
+                     end
+                    else
+                     begin
+                       cg.a_loadaddr_ref_reg(list,l.reference,l.reference.base);
+                       rg.ungetregister(list,l.reference.index);
+                       reference_reset_base(l.reference,l.reference.base,0);
+                     end;
                     { save base register }
                     tg.GetTemp(exprasmlist,TCGSize2Size[OS_ADDR],tt_normal,s.ref);
                     cg.a_load_reg_ref(exprasmlist,OS_ADDR,l.reference.base,s.ref);
@@ -1775,7 +1786,12 @@ implementation
 end.
 {
   $Log$
-  Revision 1.44  2002-09-01 14:42:41  peter
+  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
+
+  Revision 1.44  2002/09/01 14:42:41  peter
     * removevaluepara added to fix the stackpointer so restoring of
       saved registers works