|
@@ -43,6 +43,8 @@ unit cpupara;
|
|
function create_varargs_paraloc_info(p: tabstractprocdef; side: tcallercallee; varargspara: tvarargsparalist): longint; override;
|
|
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_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
|
|
private
|
|
procedure init_values(var curintreg, curfloatreg, curmmreg: tsuperregister; var cur_stack_offset: aword);
|
|
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;
|
|
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];
|
|
result:=[RS_F0..RS_F31]-[RS_F8..RS_F9,RS_F18..RS_F27];
|
|
end;
|
|
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);
|
|
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
|
|
var
|
|
var
|
|
paraloc: pcgparalocation;
|
|
paraloc: pcgparalocation;
|