Przeglądaj źródła

make rgobj.uses_registers also return true, when the rg never allocated an imreg, but there were direct cpu register allocations. this at least fixes some address regvar trashing on 68k in relation to syscalls' explicit paralocs

git-svn-id: trunk@34777 -
Károly Balogh 8 lat temu
rodzic
commit
e0e90fffc4
1 zmienionych plików z 3 dodań i 1 usunięć
  1. 3 1
      compiler/rgobj.pas

+ 3 - 1
compiler/rgobj.pas

@@ -228,6 +228,7 @@ unit rgobj;
         extended_backwards,
         extended_backwards,
         backwards_was_first : tbitset;
         backwards_was_first : tbitset;
         has_usedmarks: boolean;
         has_usedmarks: boolean;
+        has_directalloc: boolean;
 
 
         { Disposes of the reginfo array.}
         { Disposes of the reginfo array.}
         procedure dispose_reginfo;
         procedure dispose_reginfo;
@@ -523,7 +524,7 @@ unit rgobj;
 
 
     function trgobj.uses_registers:boolean;
     function trgobj.uses_registers:boolean;
       begin
       begin
-        result:=(maxreg>first_imaginary) or has_usedmarks;
+        result:=(maxreg>first_imaginary) or has_usedmarks or has_directalloc;
       end;
       end;
 
 
 
 
@@ -543,6 +544,7 @@ unit rgobj;
         if supreg>=first_imaginary then
         if supreg>=first_imaginary then
           internalerror(2003121503);
           internalerror(2003121503);
         include(used_in_proc,supreg);
         include(used_in_proc,supreg);
+        has_directalloc:=true;
         list.concat(Tai_regalloc.alloc(r,nil));
         list.concat(Tai_regalloc.alloc(r,nil));
       end;
       end;