From 07130a0c7120fa0637b9cea7b9d90fda9e0a98da Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Sat, 20 Aug 2011 07:36:42 +0000 Subject: [PATCH] + added register allocation methods from cgobj also to hlcgobj, call through to cgobj git-svn-id: branches/jvmbackend@18301 - --- compiler/hlcg2ll.pas | 19 +++++++++++++++++++ compiler/hlcgobj.pas | 21 ++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/compiler/hlcg2ll.pas b/compiler/hlcg2ll.pas index ed557b5004..fa24e131f4 100644 --- a/compiler/hlcg2ll.pas +++ b/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 diff --git a/compiler/hlcgobj.pas b/compiler/hlcgobj.pas index 2ea47c2e58..5b9333d687 100644 --- a/compiler/hlcgobj.pas +++ b/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);