Browse Source

+ added tregisterlist - dynarray of tregister, and methods get/uncpuregisters for allocating/freeing
a dynamic list of registers

git-svn-id: branches/z80@44891 -

nickysn 5 years ago
parent
commit
fc991af9d1
1 changed files with 21 additions and 0 deletions
  1. 21 0
      compiler/z80/cgcpu.pas

+ 21 - 0
compiler/z80/cgcpu.pas

@@ -35,6 +35,7 @@ unit cgcpu;
        cpubase,cpuinfo,node,cg64f32,rgcpu;
        cpubase,cpuinfo,node,cg64f32,rgcpu;
 
 
     type
     type
+      tregisterlist = array of tregister;
 
 
       { tcgz80 }
       { tcgz80 }
 
 
@@ -44,6 +45,9 @@ unit cgcpu;
         procedure init_register_allocators;override;
         procedure init_register_allocators;override;
         procedure done_register_allocators;override;
         procedure done_register_allocators;override;
 
 
+        procedure getcpuregisters(list:TAsmList;regs:tregisterlist);
+        procedure ungetcpuregisters(list:TAsmList;regs:tregisterlist);
+
         function getaddressregister(list:TAsmList):TRegister;override;
         function getaddressregister(list:TAsmList):TRegister;override;
 
 
         function GetOffsetReg(const r: TRegister;ofs : shortint): TRegister;override;
         function GetOffsetReg(const r: TRegister;ofs : shortint): TRegister;override;
@@ -161,6 +165,23 @@ unit cgcpu;
       end;
       end;
 
 
 
 
+    procedure tcgz80.getcpuregisters(list: TAsmList; regs: tregisterlist);
+      var
+        r: tregister;
+      begin
+        for r in regs do
+          getcpuregister(list,r);
+      end;
+
+    procedure tcgz80.ungetcpuregisters(list: TAsmList; regs: tregisterlist);
+      var
+        r: tregister;
+      begin
+        for r in regs do
+          ungetcpuregister(list,r);
+      end;
+
+
     function tcgz80.getaddressregister(list: TAsmList): TRegister;
     function tcgz80.getaddressregister(list: TAsmList): TRegister;
       begin
       begin
        Result:=getintregister(list,OS_ADDR);
        Result:=getintregister(list,OS_ADDR);