Browse Source

* fixed for the fix of bug #793
* fpu variables modified by nested subroutines aren't regable anymore
* $maxfpuregisters doesn't modify anymore the behavior of a procedure before

florian 25 years ago
parent
commit
eb1715ded4
3 changed files with 28 additions and 10 deletions
  1. 7 2
      compiler/cg386cal.pas
  2. 12 1
      compiler/psub.pas
  3. 9 7
      compiler/tcld.pas

+ 7 - 2
compiler/cg386cal.pas

@@ -720,7 +720,7 @@ implementation
                                     begin
                                        { it's no bad idea, to insert the VMT }
                                        emit_sym(A_PUSH,S_L,newasmsymbol(
-                                         pobjectdef(p^.methodpointer^.resulttype)^.vmt_mangledname));
+                                         procinfo^._class^.vmt_mangledname));
                                     end
                                   { destructors haven't to dispose the instance, if this is }
                                   { a direct call                                           }
@@ -1333,7 +1333,12 @@ implementation
 end.
 {
   $Log$
-  Revision 1.119  2000-01-21 12:17:41  jonas
+  Revision 1.120  2000-01-21 22:06:16  florian
+    * fixed for the fix of bug 793
+    * fpu variables modified by nested subroutines aren't regable anymore
+    * $maxfpuregisters doesn't modify anymore the behavior of a procedure before
+
+  Revision 1.119  2000/01/21 12:17:41  jonas
     * regallocation fixes
 
   Revision 1.118  2000/01/20 12:14:47  florian

+ 12 - 1
compiler/psub.pas

@@ -1366,6 +1366,7 @@ var
    _class,hp:Pobjectdef;
    { switches can change inside the procedure }
    entryswitches, exitswitches : tlocalswitches;
+   oldaktmaxfpuregisters,localmaxfpuregisters : longint;
    { code for the subroutine as tree }
 {$ifdef newcg}
    code:pnode;
@@ -1456,6 +1457,7 @@ begin
    { save entry info }
    entrypos:=aktfilepos;
    entryswitches:=aktlocalswitches;
+   localmaxfpuregisters:=aktmaxfpuregisters;
 {$ifdef newcg}
    { parse the code ... }
    if (po_assembler in aktprocsym^.definition^.procoptions) then
@@ -1498,6 +1500,8 @@ begin
    { ... and generate assembler }
    { but set the right switches for entry !! }
    aktlocalswitches:=entryswitches;
+   oldaktmaxfpuregisters:=aktmaxfpuregisters;
+   aktmaxfpuregisters:=localmaxfpuregisters;
 {$ifndef NOPASS2}
 {$ifdef newcg}
    tg.setfirsttemp(procinfo^.firsttemp_offset);
@@ -1636,6 +1640,8 @@ begin
    while symtablestack^.symtabletype=objectsymtable do
      symtablestack:=symtablestack^.next;
 
+   aktmaxfpuregisters:=oldaktmaxfpuregisters;
+
    { restore filepos, the switches are already set }
    aktfilepos:=savepos;
    { restore labels }
@@ -1939,7 +1945,12 @@ end.
 
 {
   $Log$
-  Revision 1.42  2000-01-16 22:17:12  peter
+  Revision 1.43  2000-01-21 22:06:16  florian
+    * fixed for the fix of bug 793
+    * fpu variables modified by nested subroutines aren't regable anymore
+    * $maxfpuregisters doesn't modify anymore the behavior of a procedure before
+
+  Revision 1.42  2000/01/16 22:17:12  peter
     * renamed call_offset to para_offset
 
   Revision 1.41  2000/01/11 17:16:06  jonas

+ 9 - 7
compiler/tcld.pas

@@ -118,11 +118,8 @@ implementation
                         begin
                           p^.registers32:=1;
                           { further, the variable can't be put into a register }
-{$ifdef INCLUDEOK}
-                          exclude(pvarsym(p^.symtableentry)^.varoptions,vo_regable);
-{$else}
-                          pvarsym(p^.symtableentry)^.varoptions:=pvarsym(p^.symtableentry)^.varoptions-[vo_regable];
-{$endif}
+                          pvarsym(p^.symtableentry)^.varoptions:=
+                            pvarsym(p^.symtableentry)^.varoptions-[vo_fpuregable,vo_regable];
                         end;
                      end;
                    if (pvarsym(p^.symtableentry)^.varspez=vs_const) then
@@ -481,7 +478,12 @@ implementation
 end.
 {
   $Log$
-  Revision 1.57  2000-01-07 01:14:46  peter
+  Revision 1.58  2000-01-21 22:06:16  florian
+    * fixed for the fix of bug 793
+    * fpu variables modified by nested subroutines aren't regable anymore
+    * $maxfpuregisters doesn't modify anymore the behavior of a procedure before
+
+  Revision 1.57  2000/01/07 01:14:46  peter
     * updated copyright to 2000
 
   Revision 1.56  2000/01/06 01:08:59  pierre
@@ -603,4 +605,4 @@ end.
         - empty array constructors are now handled correctly (e.g. for sysutils.format)
         - comparsion of ansistrings was sometimes coded wrong
 
-}
+}