Browse Source

+ Risc-V 64: tcpuparamanager.get_saved_registers_int and tcpuparamanager.get_saved_registers_fpu

florian 1 year ago
parent
commit
e6ba09aedd
1 changed files with 16 additions and 0 deletions
  1. 16 0
      compiler/riscv64/cpupara.pas

+ 16 - 0
compiler/riscv64/cpupara.pas

@@ -43,6 +43,8 @@ unit cpupara;
         function create_varargs_paraloc_info(p: tabstractprocdef; side: tcallercallee; varargspara: tvarargsparalist): longint; override;
         function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
 
+       function get_saved_registers_fpu(calloption: tproccalloption): tcpuregisterarray;override;
+       function get_saved_registers_int(calloption: tproccalloption): tcpuregisterarray;override;
       private
         procedure init_values(var curintreg, curfloatreg, curmmreg: tsuperregister; var cur_stack_offset: aword);
         function create_paraloc_info_intern(p: tabstractprocdef; side: tcallercallee; paras: tparalist; var curintreg, curfloatreg, curmmreg: tsuperregister; var cur_stack_offset: aword; isVararg : boolean): longint;
@@ -68,6 +70,20 @@ implementation
         result:=[RS_F0..RS_F31]-[RS_F8..RS_F9,RS_F18..RS_F27];
       end;
 
+    function tcpuparamanager.get_saved_registers_int(calloption : tproccalloption):tcpuregisterarray;
+      const
+        saved_regs: tcpuregisterarray = (RS_X2,RS_X8,RS_X9,RS_X18,RS_X19,RS_X20,RS_X21,RS_X22,RS_X23,RS_X24,RS_X26,RS_X26,RS_X27);
+      begin
+        result:=saved_regs;
+      end;
+
+    function tcpuparamanager.get_saved_registers_fpu(calloption : tproccalloption):tcpuregisterarray;
+      const
+        saved_regs: tcpuregisterarray = (RS_F8,RS_F9,RS_F18,RS_F19,RS_F20,RS_F21,RS_F22,RS_F23,RS_F24,RS_F25,RS_F26,RS_F27);
+      begin
+        result:=saved_regs;
+      end;
+
     procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
       var
         paraloc: pcgparalocation;