* renamed getintparaloc to getcgtempparaloc

o it can be used for more than integer parameters

git-svn-id: trunk@43781 -
This commit is contained in:
Jonas Maebe 2019-12-24 22:12:25 +00:00
parent 9853ed53e8
commit 1e3f72403e
33 changed files with 107 additions and 105 deletions

View File

@ -1800,9 +1800,9 @@ implementation
paraloc1.init;
paraloc2.init;
paraloc3.init;
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getintparaloc(list,pd,3,paraloc3);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
paramanager.getcgtempparaloc(list,pd,3,paraloc3);
a_load_const_cgpara(list,OS_SINT,len,paraloc3);
a_loadaddr_ref_cgpara(list,dest,paraloc2);
a_loadaddr_ref_cgpara(list,source,paraloc1);

View File

@ -2611,9 +2611,9 @@ unit cgcpu;
paraloc1.init;
paraloc2.init;
paraloc3.init;
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getintparaloc(list,pd,3,paraloc3);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
paramanager.getcgtempparaloc(list,pd,3,paraloc3);
a_load_const_cgpara(list,OS_SINT,len,paraloc3);
a_loadaddr_ref_cgpara(list,dest,paraloc2);
a_loadaddr_ref_cgpara(list,source,paraloc1);

View File

@ -40,7 +40,7 @@ unit cpupara;
function get_saved_registers_int(calloption : tproccalloption):tcpuregisterarray;override;
function push_addr_param(varspez:tvarspez;def : tdef;calloption : tproccalloption) : boolean;override;
function ret_in_param(def:tdef;pd:tabstractprocdef):boolean;override;
procedure getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):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;
@ -94,7 +94,7 @@ unit cpupara;
end;
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
var
paraloc : pcgparalocation;
psym : tparavarsym;

View File

@ -2101,8 +2101,8 @@ unit cgcpu;
pd:=search_system_proc(name);
paraloc1.init;
paraloc2.init;
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
a_load_reg_cgpara(list,OS_8,src1,paraloc2);
a_load_reg_cgpara(list,OS_8,src2,paraloc1);
paramanager.freecgpara(list,paraloc2);
@ -2198,8 +2198,8 @@ unit cgcpu;
pd:=search_system_proc(name);
paraloc1.init;
paraloc2.init;
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
a_load_reg_cgpara(list,OS_16,src1,paraloc2);
a_load_reg_cgpara(list,OS_16,src2,paraloc1);
paramanager.freecgpara(list,paraloc2);
@ -2445,9 +2445,9 @@ unit cgcpu;
paraloc1.init;
paraloc2.init;
paraloc3.init;
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getintparaloc(list,pd,3,paraloc3);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
paramanager.getcgtempparaloc(list,pd,3,paraloc3);
a_load_const_cgpara(list,OS_SINT,len,paraloc3);
a_loadaddr_ref_cgpara(list,dest,paraloc2);
a_loadaddr_ref_cgpara(list,source,paraloc1);

View File

@ -162,9 +162,9 @@ unit cgexcept;
{ fpc_pushexceptaddr(exceptionframetype, setjmp_buffer, exception_address_chain_entry) }
pd:=search_system_proc('fpc_pushexceptaddr');
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getintparaloc(list,pd,3,paraloc3);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
paramanager.getcgtempparaloc(list,pd,3,paraloc3);
if pd.is_pushleftright then
begin
{ type of exceptionframe }
@ -197,7 +197,7 @@ unit cgexcept;
{ fpc_setjmp(result_of_pushexceptaddr_call) }
pd:=search_system_proc('fpc_setjmp');
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
hlcg.a_load_reg_cgpara(list,pushexceptres.def,tmpresloc.register,paraloc1);
paramanager.freecgpara(list,paraloc1);
@ -302,7 +302,7 @@ unit cgexcept;
reference_reset_symbol(href2, current_asmdata.RefAsmSymbol(excepttype.vmt_mangledname, AT_DATA, indirect), 0, sizeof(pint), []);
if otherunit then
current_module.add_extern_asmsym(excepttype.vmt_mangledname, AB_EXTERNAL, AT_DATA);
paramanager.getintparaloc(list, pd, 1, paraloc1);
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
hlcg.a_loadaddr_ref_cgpara(list, excepttype.vmt_def, href2, paraloc1);
paramanager.freecgpara(list, paraloc1);
fpc_catches_res:=hlcg.g_call_system_proc(list, pd, [@paraloc1], nil);

View File

@ -3296,7 +3296,7 @@ implementation
current_asmdata.getjumplabel(oklabel);
a_cmp_const_reg_label(list,selftype,OC_NE,0,reg,oklabel);
cgpara1.init;
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
a_load_const_cgpara(list,s32inttype,aint(210),cgpara1);
paramanager.freecgpara(list,cgpara1);
g_call_system_proc(list,pd,[@cgpara1],nil).resetiftemp;
@ -3329,9 +3329,9 @@ implementation
cgpara1.init;
cgpara2.init;
cgpara3.init;
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getintparaloc(list,pd,3,cgpara3);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
paramanager.getcgtempparaloc(list,pd,3,cgpara3);
if pd.is_pushleftright then
begin
a_loadaddr_ref_cgpara(list,strdef,dest,cgpara1);
@ -3361,8 +3361,8 @@ implementation
pd:=search_system_proc('fpc_variant_copy_overwrite');
cgpara1.init;
cgpara2.init;
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
if pd.is_pushleftright then
begin
a_loadaddr_ref_cgpara(list,vardef,source,cgpara1);
@ -3405,7 +3405,7 @@ implementation
if incrfunc<>'' then
begin
pd:=search_system_proc(incrfunc);
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
{ widestrings aren't ref. counted on all platforms so we need the address
to create a real copy }
if is_widestring(t) then
@ -3419,8 +3419,8 @@ implementation
else
begin
pd:=search_system_proc('fpc_addref');
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
if is_open_array(t) then
InternalError(201103054);
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
@ -3459,7 +3459,7 @@ implementation
else if t.typ=variantdef then
begin
pd:=search_system_proc('fpc_variant_init');
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
a_loadaddr_ref_cgpara(list,t,ref,cgpara1);
paramanager.freecgpara(list,cgpara1);
g_call_system_proc(list,pd,[@cgpara1],nil).resetiftemp;
@ -3469,8 +3469,8 @@ implementation
if is_open_array(t) then
InternalError(201103052);
pd:=search_system_proc('fpc_initialize');
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
if pd.is_pushleftright then
begin
@ -3519,8 +3519,8 @@ implementation
pd:=search_system_proc('fpc_dynarray_clear')
else
pd:=search_system_proc('fpc_finalize');
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
if pd.is_pushleftright then
begin
@ -3541,7 +3541,7 @@ implementation
end;
pd:=search_system_proc(decrfunc);
cgpara1.init;
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
a_loadaddr_ref_cgpara(list,t,ref,cgpara1);
paramanager.freecgpara(list,cgpara1);
g_call_system_proc(list,pd,[@cgpara1],nil).resetiftemp;
@ -3559,9 +3559,9 @@ implementation
cgpara2.init;
cgpara3.init;
pd:=search_system_proc(name);
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getintparaloc(list,pd,3,cgpara3);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
paramanager.getcgtempparaloc(list,pd,3,cgpara3);
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
{ if calling convention is left to right, push parameters 1 and 2 }
@ -3857,7 +3857,7 @@ implementation
{ do getmem call }
pd:=search_system_proc('fpc_getmem');
cgpara1.init;
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
a_load_reg_cgpara(list,sinttype,sizereg,cgpara1);
paramanager.freecgpara(list,cgpara1);
getmemres:=g_call_system_proc(list,pd,[@cgpara1],ptrarrdef);
@ -3872,9 +3872,9 @@ implementation
cgpara1.init;
cgpara2.init;
cgpara3.init;
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getintparaloc(list,pd,3,cgpara3);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
paramanager.getcgtempparaloc(list,pd,3,cgpara3);
if pd.is_pushleftright then
begin
{ load source }
@ -3911,7 +3911,7 @@ implementation
{ do freemem call }
pd:=search_system_proc('fpc_freemem');
cgpara1.init;
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
{ load source }
a_load_loc_cgpara(list,cpointerdef.getreusable(arrdef),l,cgpara1);
paramanager.freecgpara(list,cgpara1);
@ -5367,7 +5367,7 @@ implementation
begin
pd:=search_system_proc('fpc_stackcheck');
paraloc1.init;
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
hlcg.a_load_const_cgpara(list,paraloc1.def,current_procinfo.calc_stackframe_size,paraloc1);
paramanager.freecgpara(list,paraloc1);
paraloc1.done;
@ -5382,7 +5382,7 @@ implementation
paraloc1.init;
{ The parameter to fpc_stackcheck is loaded seperately via
gen_stack_check_size_para() }
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.freecgpara(list,paraloc1);
{ Call the helper }
g_call_system_proc(list,pd,[@paraloc1],nil).resetiftemp;

View File

@ -53,7 +53,7 @@ unit cpupara;
other memory models, this mechanism has to be extended somehow to
support 32-bit addresses on a 16-bit CPU.
}
procedure getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
procedure createtempparaloc(list: TAsmList;calloption : tproccalloption;parasym : tparavarsym;can_use_final_stack_loc : boolean;var cgpara:TCGPara);override;
@ -256,7 +256,7 @@ unit cpupara;
end;
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
var
paraloc : pcgparalocation;
psym: tparavarsym;

View File

@ -136,7 +136,7 @@ implementation
if pvd.typ<>procvardef then
internalerror(2012120901);
paraloc1.init;
paramanager.getintparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1);
hregister:=hlcg.getaddressregister(current_asmdata.CurrAsmList,pvd);
segreg:=cg.getintregister(current_asmdata.CurrAsmList,OS_16);
reference_reset_symbol(segref,current_asmdata.RefAsmSymbol('FPC_THREADVAR_RELOCATE',AT_DATA),0,pvd.alignment,[]);

View File

@ -168,7 +168,7 @@ implementation
internalerror(2012010601);
pd:=tprocdef(tprocsym(sym).ProcdefList[0]);
paraloc1.init;
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
hlcg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,resultdef,location.reference,paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
paraloc1.done;

View File

@ -44,7 +44,7 @@ interface
{Returns a structure giving the information on the storage of the parameter
(which must be an integer parameter)
@param(nr Parameter number of routine, starting from 1)}
procedure getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
function create_paraloc_info(p : TAbstractProcDef; side: tcallercallee):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;
@ -65,7 +65,7 @@ implementation
hlcgobj;
procedure tcpuparamanager.GetIntParaLoc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
begin
{ not yet implemented/used }
internalerror(2010121001);

View File

@ -1175,19 +1175,19 @@ implementation
sizepara.init;
alignpara.init;
volatilepara.init;
paramanager.getintparaloc(list,pd,1,destpara);
paramanager.getintparaloc(list,pd,2,sourcepara);
paramanager.getintparaloc(list,pd,3,sizepara);
paramanager.getcgtempparaloc(list,pd,1,destpara);
paramanager.getcgtempparaloc(list,pd,2,sourcepara);
paramanager.getcgtempparaloc(list,pd,3,sizepara);
if indivalign then
begin
paramanager.getintparaloc(list,pd,4,volatilepara);
paramanager.getcgtempparaloc(list,pd,4,volatilepara);
destpara.Alignment:=-dest.alignment;
sourcepara.Alignment:=-source.alignment;
end
else
begin
paramanager.getintparaloc(list,pd,4,alignpara);
paramanager.getintparaloc(list,pd,5,volatilepara);
paramanager.getcgtempparaloc(list,pd,4,alignpara);
paramanager.getcgtempparaloc(list,pd,5,volatilepara);
maxalign:=newalignment(max(source.alignment,dest.alignment),min(source.alignment,dest.alignment));
a_load_const_cgpara(list,u32inttype,maxalign,alignpara);
end;

View File

@ -45,7 +45,7 @@ unit llvmpara;
architecture-specific code, or whether we will have to integrate parts
into the various tcpuparamanager classes }
tllvmparamanager = class(tcpuparamanager)
procedure getintparaloc(list: TAsmList; pd: tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
procedure getcgtempparaloc(list: TAsmList; pd: tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
function param_use_paraloc(const cgpara: tcgpara): boolean; override;
procedure createtempparaloc(list: TAsmList; calloption: tproccalloption; parasym: tparavarsym; can_use_final_stack_loc: boolean; var cgpara: TCGPara); override;
function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint; override;
@ -71,7 +71,7 @@ unit llvmpara;
{ tllvmparamanager }
procedure tllvmparamanager.getintparaloc(list: TAsmList; pd: tabstractprocdef; nr: longint; var cgpara: tcgpara);
procedure tllvmparamanager.getcgtempparaloc(list: TAsmList; pd: tabstractprocdef; nr: longint; var cgpara: tcgpara);
begin
if (nr<1) or (nr>pd.paras.count) then
InternalError(2015040401);

View File

@ -321,7 +321,7 @@ implementation
landingpadtypeiddef:=tfieldvarsym(trecorddef(landingpadstructdef).symtable.symlist[1]).vardef;
exceptiontypeidreg:=hlcg.getaddressregister(list,landingpadtypeiddef);
pd:=search_system_proc('llvm_eh_typeid_for');
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
reference_reset_symbol(rttiref,rttisym,0,rttidef.alignment,[]);
rttiref.refaddr:=addr_full;
hlcg.a_load_ref_cgpara(list,cpointerdef.getreusable(rttidef),rttiref,paraloc1);
@ -341,7 +341,7 @@ implementation
list.concat(taillvm.extract(la_extractvalue,wrappedexception,landingpadstructdef,landingpadres,0));
pd:=search_system_proc('fpc_psabi_begin_catch');
paramanager.getintparaloc(list, pd, 1, paraloc1);
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
hlcg.a_load_reg_cgpara(list,voidpointertype,wrappedexception,paraloc1);
begincatchres:=hlcg.g_call_system_proc(list,pd,[@paraloc1],nil);
location_reset(exceptloc, LOC_REGISTER, def_cgsize(begincatchres.def));

View File

@ -159,8 +159,8 @@ implementation
sizepara.init;
ptrpara.init;
pd:=search_system_proc(procname);
paramanager.getintparaloc(list,pd,1,sizepara);
paramanager.getintparaloc(list,pd,2,ptrpara);
paramanager.getcgtempparaloc(list,pd,1,sizepara);
paramanager.getcgtempparaloc(list,pd,2,ptrpara);
hlcg.a_load_const_cgpara(list,sizepara.def,temp^.size,sizepara);
hlcg.a_loadaddr_ref_cgpara(list,temp^.def,ref,ptrpara);
hlcg.g_call_system_proc(list,pd,[@sizepara,@ptrpara],nil).resetiftemp;

View File

@ -576,8 +576,8 @@ unit cgcpu;
pd:=search_system_proc(name);
paraloc1.init;
paraloc2.init;
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
a_load_const_cgpara(list,size,a,paraloc2);
a_load_reg_cgpara(list,OS_32,reg,paraloc1);
paramanager.freecgpara(list,paraloc2);
@ -600,8 +600,8 @@ unit cgcpu;
pd:=search_system_proc(name);
paraloc1.init;
paraloc2.init;
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
a_load_reg_cgpara(list,OS_32,reg1,paraloc2);
a_load_reg_cgpara(list,OS_32,reg2,paraloc1);
paramanager.freecgpara(list,paraloc2);

View File

@ -1489,9 +1489,9 @@ begin
paraloc1.init;
paraloc2.init;
paraloc3.init;
paramanager.getintparaloc(list, pd, 1, paraloc1);
paramanager.getintparaloc(list, pd, 2, paraloc2);
paramanager.getintparaloc(list, pd, 3, paraloc3);
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
paramanager.getcgtempparaloc(list, pd, 2, paraloc2);
paramanager.getcgtempparaloc(list, pd, 3, paraloc3);
a_load_const_cgpara(list, OS_SINT, len, paraloc3);
a_loadaddr_ref_cgpara(list, dest, paraloc2);
a_loadaddr_ref_cgpara(list, Source, paraloc1);

View File

@ -1267,7 +1267,7 @@ implementation
pd:=search_system_proc('fpc_safecallcheck');
cgpara.init;
{ fpc_safecallcheck returns its parameter value (= function result of function we just called) }
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,cgpara);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,cgpara);
location_reset(tmploc,LOC_REGISTER,def_cgsize(retloc.Def));
tmploc.register:=hlcg.getregisterfordef(current_asmdata.CurrAsmList,retloc.Def);
hlcg.gen_load_cgpara_loc(current_asmdata.CurrAsmList,retloc.Def,retloc,tmploc,true);

View File

@ -888,7 +888,7 @@ implementation
nil otherwise. }
pd:=search_system_proc('fpc_safecallhandler');
cgpara.init;
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,cgpara);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,cgpara);
if is_class(current_procinfo.procdef.struct) then
begin
selfsym:=tparavarsym(current_procinfo.procdef.parast.Find('self'));

View File

@ -336,7 +336,7 @@ implementation
reference_reset_base(tvref,hreg_tv_rec,0,ctempposinvalid,tvref.alignment,tvref.volatility)
end;
paraloc1.init;
paramanager.getintparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1);
hregister:=hlcg.getaddressregister(current_asmdata.CurrAsmList,pvd);
reference_reset_symbol(href,current_asmdata.RefAsmSymbol('FPC_THREADVAR_RELOCATE',AT_DATA,indirect),0,pvd.alignment,[]);
if not issystemunit then

View File

@ -455,7 +455,7 @@ implementation
cg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,OS_INT,OC_NE,0,hdenom,hl);
paraloc1.init;
pd:=search_system_proc('fpc_handleerror');
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
cg.a_load_const_cgpara(current_asmdata.CurrAsmList,OS_S32,aint(200),paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_HANDLEERROR',false);

View File

@ -306,7 +306,7 @@ implementation
internalerror(2012010601);
pd:=tprocdef(tprocsym(sym).ProcdefList[0]);
paraloc1.init;
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
hlcg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference,paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
paraloc1.done;
@ -399,7 +399,7 @@ implementation
(sym.typ<>procsym) then
internalerror(2012010602);
pd:=tprocdef(tprocsym(sym).ProcdefList[0]);
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
hlcg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference,paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
hlcg.allocallcpuregisters(current_asmdata.CurrAsmList);
@ -768,8 +768,8 @@ implementation
if is_dynamic_array(left.resultdef) then
begin
pd:=search_system_proc('fpc_dynarray_rangecheck');
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
if pd.is_pushleftright then
begin
hlcg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.resultdef,left.location,paraloc1);
@ -808,8 +808,8 @@ implementation
begin
helpername:='fpc_'+tstringdef(left.resultdef).stringtypname+'_rangecheck';
pd:=search_system_proc(helpername);
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
if pd.is_pushleftright then
begin
hlcg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.resultdef,left.location,paraloc1);

View File

@ -94,7 +94,9 @@ unit paramgr;
function get_saved_registers_fpu(calloption : tproccalloption):tcpuregisterarray;virtual;
function get_saved_registers_mm(calloption : tproccalloption):tcpuregisterarray;virtual;
procedure getintparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);virtual;
{ \brief Get a parameter location for calling a procdef directly instead of via a call node }
{ \returns parameter location in \c cgpara for parameter \c nr of \c pd }
procedure getcgtempparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);virtual;
{# allocate an individual pcgparalocation that's part of a tcgpara
@ -746,7 +748,7 @@ implementation
end;
procedure tparamanager.getintparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);
procedure tparamanager.getcgtempparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);
begin
if (nr<1) or (nr>pd.paras.count) then
InternalError(2013060101);

View File

@ -38,7 +38,7 @@ unit cpupara;
function get_saved_registers_int(calloption : tproccalloption):tcpuregisterarray;override;
function push_addr_param(varspez:tvarspez;def : tdef;calloption : tproccalloption) : boolean;override;
procedure getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):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;
@ -91,7 +91,7 @@ unit cpupara;
end;
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
var
paraloc : pcgparalocation;
psym : tparavarsym;

View File

@ -43,7 +43,7 @@ type
tproccalloption): boolean; override;
function ret_in_param(def: tdef; pd: tabstractprocdef): boolean; override;
procedure getintparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): 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;
@ -92,7 +92,7 @@ begin
result:=saved_regs;
end;
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
var
paraloc: pcgparalocation;
psym: tparavarsym;

View File

@ -712,7 +712,7 @@ unit cgppc;
begin
pd:=search_system_proc('mcount');
paraloc1.init;
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
a_load_reg_cgpara(list,OS_ADDR,NR_R0,paraloc1);
paramanager.freecgpara(list,paraloc1);
paraloc1.done;

View File

@ -642,7 +642,7 @@ implementation
pd:=search_system_proc('_unwind_resume');
cgpara1.init;
paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
hlcg.a_load_reg_cgpara(list,voidpointertype,t.unwind_info,cgpara1);
paramanager.freecgpara(list,cgpara1);
hlcg.g_call_system_proc(list,'_unwind_resume',[@cgpara1],nil).resetiftemp;
@ -741,7 +741,7 @@ implementation
(current_procinfo as tpsabiehprocinfo).CurrentAction.AddAction(tobjectdef(-1));
pd:=search_system_proc('fpc_psabi_begin_catch');
paramanager.getintparaloc(list, pd, 1, paraloc1);
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
hlcg.a_load_reg_cgpara(list,voidpointertype,wrappedexception,paraloc1);
begincatchres:=hlcg.g_call_system_proc(list,pd,[@paraloc1],nil);
location_reset(exceptloc, LOC_REGISTER, def_cgsize(begincatchres.def));

View File

@ -315,9 +315,9 @@ unit cgcpu;
paraloc1.init;
paraloc2.init;
paraloc3.init;
paramanager.getintparaloc(list, pd, 1, paraloc1);
paramanager.getintparaloc(list, pd, 2, paraloc2);
paramanager.getintparaloc(list, pd, 3, paraloc3);
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
paramanager.getcgtempparaloc(list, pd, 2, paraloc2);
paramanager.getcgtempparaloc(list, pd, 3, paraloc3);
a_load_const_cgpara(list, OS_SINT, len, paraloc3);
a_loadaddr_ref_cgpara(list, dest, paraloc2);
a_loadaddr_ref_cgpara(list, Source, paraloc1);

View File

@ -37,7 +37,7 @@ unit cpupara;
function get_volatile_registers_fpu(calloption : tproccalloption):tcpuregisterset;override;
function push_addr_param(varspez:tvarspez;def : tdef;calloption : tproccalloption) : boolean;override;
procedure getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):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;
@ -68,7 +68,7 @@ unit cpupara;
end;
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
var
paraloc : pcgparalocation;
psym : tparavarsym;

View File

@ -524,9 +524,9 @@ implementation
paraloc1.init;
paraloc2.init;
paraloc3.init;
paramanager.getintparaloc(list, pd, 1, paraloc1);
paramanager.getintparaloc(list, pd, 2, paraloc2);
paramanager.getintparaloc(list, pd, 3, paraloc3);
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
paramanager.getcgtempparaloc(list, pd, 2, paraloc2);
paramanager.getcgtempparaloc(list, pd, 3, paraloc3);
a_load_const_cgpara(list, OS_SINT, len, paraloc3);
a_loadaddr_ref_cgpara(list, dest, paraloc2);
a_loadaddr_ref_cgpara(list, Source, paraloc1);

View File

@ -38,7 +38,7 @@ unit cpupara;
function push_addr_param(varspez: tvarspez; def: tdef; calloption: tproccalloption): boolean; override;
function ret_in_param(def: tdef; pd: tabstractprocdef): boolean; override;
procedure getintparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): 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;
@ -68,7 +68,7 @@ implementation
result:=[RS_F0..RS_F31]-[RS_F8..RS_F9,RS_F18..RS_F27];
end;
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
var
paraloc: pcgparalocation;
psym: tparavarsym;

View File

@ -1113,9 +1113,9 @@ implementation
paraloc1.init;
paraloc2.init;
paraloc3.init;
paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getintparaloc(list,pd,3,paraloc3);
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
paramanager.getcgtempparaloc(list,pd,3,paraloc3);
a_load_const_cgpara(list,OS_SINT,len,paraloc3);
a_loadaddr_ref_cgpara(list,dest,paraloc2);
a_loadaddr_ref_cgpara(list,source,paraloc1);

View File

@ -65,7 +65,7 @@ implementation
begin
paraloc1.init;
pd:=search_system_proc('fpc_tls_add');
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
if not(vo_is_weak_external in gvs.varoptions) then
reference_reset_symbol(href,current_asmdata.RefAsmSymbol(gvs.mangledname,AT_DATA,use_indirect_symbol(gvs)),0,sizeof(pint),[])
else

View File

@ -448,8 +448,8 @@ unit cgcpu;
pd:=search_system_proc('_fpc_local_unwind');
para1.init;
para2.init;
paramanager.getintparaloc(list,pd,1,para1);
paramanager.getintparaloc(list,pd,2,para2);
paramanager.getcgtempparaloc(list,pd,1,para1);
paramanager.getcgtempparaloc(list,pd,2,para2);
reference_reset_symbol(href,l,0,1,[]);
{ TODO: using RSP is correct only while the stack is fixed!!
(true now, but will change if/when allocating from stack is implemented) }