Browse Source

* bugs in secondfuncret for result in subprocedures removed

pierre 27 years ago
parent
commit
fa1478ef99
4 changed files with 37 additions and 10 deletions
  1. 5 2
      compiler/cg386ld.pas
  2. 8 5
      compiler/cg68kld.pas
  3. 5 2
      compiler/i386.pas
  4. 19 1
      compiler/m68k.pas

+ 5 - 2
compiler/cg386ld.pas

@@ -531,7 +531,7 @@ implementation
          if @procinfo<>pprocinfo(p^.funcretprocinfo) then
            begin
               hr:=getregister32;
-              hr_valid:=false;
+              hr_valid:=true;
               hp:=new_reference(procinfo.framepointer,
                 procinfo.framepointer_offset);
               exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_L,hp,hr)));
@@ -733,7 +733,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.23  1998-10-06 17:16:44  pierre
+  Revision 1.24  1998-10-14 08:47:14  pierre
+    * bugs in secondfuncret for result in subprocedures removed
+
+  Revision 1.23  1998/10/06 17:16:44  pierre
     * some memory leaks fixed (thanks to Peter for heaptrc !)
 
   Revision 1.22  1998/10/01 09:22:53  peter

+ 8 - 5
compiler/cg68kld.pas

@@ -447,10 +447,10 @@ implementation
          hr_valid:=false;
 { !!!!!!! }
 
-(*         if @procinfo<>pprocinfo(p^.funcretprocinfo) then
+         if @procinfo<>pprocinfo(p^.funcretprocinfo) then
            begin
-              hr:=getregister32;
-              hr_valid:=false;
+              hr:=getaddressreg;
+              hr_valid:=true;
               hp:=new_reference(procinfo.framepointer,
                 procinfo.framepointer_offset);
               exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_L,hp,hr)));
@@ -466,7 +466,7 @@ implementation
                 end;
               p^.location.reference.base:=hr;
            end
-         else *)
+         else
            p^.location.reference.base:=procinfo.framepointer;
          p^.location.reference.offset:=procinfo.retoffset;
          if ret_in_param(p^.retdef) then
@@ -510,7 +510,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.5  1998-10-14 08:08:53  pierre
+  Revision 1.6  1998-10-14 08:47:16  pierre
+    * bugs in secondfuncret for result in subprocedures removed
+
+  Revision 1.5  1998/10/14 08:08:53  pierre
     * following Peters remark, removed all ifdef in
       the systems unit enums
     * last bugs of cg68k removed for sysamiga

+ 5 - 2
compiler/i386.pas

@@ -308,7 +308,7 @@ unit i386;
 
     { resets all values of ref to defaults }
     procedure reset_reference(var ref : treference);
-    { mostly set value of a reference }
+    { set mostly used values of a new reference }
     function new_reference(base : tregister;offset : longint) : preference;
     { same as reset_reference, but symbol is disposed }
     { use this only for already used references       }
@@ -1724,7 +1724,10 @@ unit i386;
 end.
 {
   $Log$
-  Revision 1.12  1998-10-08 17:17:20  pierre
+  Revision 1.13  1998-10-14 08:47:17  pierre
+    * bugs in secondfuncret for result in subprocedures removed
+
+  Revision 1.12  1998/10/08 17:17:20  pierre
     * current_module old scanner tagged as invalid if unit is recompiled
     + added ppheap for better info on tracegetmem of heaptrc
       (adds line column and file index)

+ 19 - 1
compiler/m68k.pas

@@ -353,6 +353,9 @@ type
     { resets all values of ref to defaults }
     procedure reset_reference(var ref : treference);
 
+    { set mostly used values of a new reference }
+    function new_reference(base : tregister;offset : longint) : preference;
+
     { same as reset_reference, but symbol is disposed }
     { use this only for already used references       }
     procedure clear_reference(var ref : treference);
@@ -916,6 +919,18 @@ type
         end;
       end;
 
+      function new_reference(base : tregister;offset : longint) : preference;
+
+        var
+           r : preference;
+        begin
+           new(r);
+           reset_reference(r^);
+           r^.base:=base;
+           r^.offset:=offset;
+           new_reference:=r;
+        end;
+
     procedure clear_reference(var ref : treference);
 
       begin
@@ -1593,7 +1608,10 @@ type
 end.
 {
   $Log$
-  Revision 1.8  1998-10-13 16:50:15  pierre
+  Revision 1.9  1998-10-14 08:47:18  pierre
+    * bugs in secondfuncret for result in subprocedures removed
+
+  Revision 1.8  1998/10/13 16:50:15  pierre
     * undid some changes of Peter that made the compiler wrong
       for m68k (I had to reinsert some ifdefs)
     * removed several memory leaks under m68k