Browse Source

+ added register allocation methods from cgobj also to hlcgobj,
call through to cgobj

git-svn-id: branches/jvmbackend@18301 -

Jonas Maebe 14 years ago
parent
commit
07130a0c71
2 changed files with 39 additions and 1 deletions
  1. 19 0
      compiler/hlcg2ll.pas
  2. 20 1
      compiler/hlcgobj.pas

+ 19 - 0
compiler/hlcg2ll.pas

@@ -56,6 +56,11 @@ unit hlcg2ll;
           {************************************************}
           {                 basic routines                 }
           constructor create;
+          procedure init_register_allocators;override;
+          {# Clean up the register allocators needed for the codegenerator.}
+          procedure done_register_allocators;override;
+          {# Set whether live_start or live_end should be updated when allocating registers, needed when e.g. generating initcode after the rest of the code. }
+          procedure set_regalloc_live_range_direction(dir: TRADirection);override;
 
           {# Gets a register suitable to do integer operations on.}
           function getintregister(list:TAsmList;size:tdef):Tregister;override;
@@ -405,6 +410,20 @@ implementation
     begin
     end;
 
+  procedure thlcg2ll.init_register_allocators;
+    begin
+      cg.init_register_allocators;
+    end;
+
+  procedure thlcg2ll.done_register_allocators;
+    begin
+      cg.done_register_allocators;
+    end;
+
+  procedure thlcg2ll.set_regalloc_live_range_direction(dir: TRADirection);
+    begin
+      cg.set_regalloc_live_range_direction(dir);
+    end;
 
   function thlcg2ll.getintregister(list: TAsmList; size: tdef): Tregister;
     begin

+ 20 - 1
compiler/hlcgobj.pas

@@ -57,6 +57,12 @@ unit hlcgobj;
           {                 basic routines                 }
           constructor create;
 
+          {# Initialize the register allocators needed for the codegenerator.}
+          procedure init_register_allocators;virtual;
+          {# Clean up the register allocators needed for the codegenerator.}
+          procedure done_register_allocators;virtual;
+          {# Set whether live_start or live_end should be updated when allocating registers, needed when e.g. generating initcode after the rest of the code. }
+          procedure set_regalloc_live_range_direction(dir: TRADirection);virtual;
           {# Gets a register suitable to do integer operations on.}
           function getintregister(list:TAsmList;size:tdef):Tregister;virtual;
           {# Gets a register suitable to do integer operations on.}
@@ -447,13 +453,26 @@ implementation
     begin
     end;
 
+  procedure thlcgobj.init_register_allocators;
+    begin
+      cg.init_register_allocators;
+    end;
+
+  procedure thlcgobj.done_register_allocators;
+    begin
+      cg.done_register_allocators;
+    end;
+
+  procedure thlcgobj.set_regalloc_live_range_direction(dir: TRADirection);
+    begin
+      cg.set_regalloc_live_range_direction(dir);
+    end;
 
   function thlcgobj.getintregister(list: TAsmList; size: tdef): Tregister;
     begin
       result:=cg.getintregister(list,def_cgsize(size));
     end;
 
-
   function thlcgobj.getaddressregister(list: TAsmList; size: tdef): Tregister;
     begin
       result:=cg.getaddressregister(list);