diff --git a/compiler/aarch64/cgcpu.pas b/compiler/aarch64/cgcpu.pas index 69970b53bb..06c58e30c5 100644 --- a/compiler/aarch64/cgcpu.pas +++ b/compiler/aarch64/cgcpu.pas @@ -1748,9 +1748,9 @@ implementation paraloc1.init; paraloc2.init; paraloc3.init; - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); - paramanager.getintparaloc(pd,3,paraloc3); + paramanager.getintparaloc(list,pd,1,paraloc1); + paramanager.getintparaloc(list,pd,2,paraloc2); + paramanager.getintparaloc(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); diff --git a/compiler/alpha/cpupara.pas b/compiler/alpha/cpupara.pas index 54b6cca479..a57eb98f5c 100644 --- a/compiler/alpha/cpupara.pas +++ b/compiler/alpha/cpupara.pas @@ -32,7 +32,6 @@ unit cpupara; type tcpuparamanager = class(tparamanager) - function getintparaloc(nr : longint) : tparalocation;override; procedure create_param_loc_info(p : tabstractprocdef);override; function getfuncretparaloc(p : tabstractprocdef) : tparalocation;override; end; @@ -45,25 +44,6 @@ unit cpupara; cpuinfo,cginfo,cgbase, defbase; - function tcpuparamanager.getintparaloc(nr : longint) : tparalocation; - - begin - fillchar(result,sizeof(tparalocation),0); - if nr<1 then - internalerror(2002070801) - else if nr<=8 then - begin - result.loc:=LOC_REGISTER; - result.register:=tregister(longint(R_2)+nr); - end - else - begin - result.loc:=LOC_REFERENCE; - result.reference.index:=stack_pointer_reg; - result.reference.offset:=(nr-8)*4; - end; - end; - function getparaloc(p : tdef) : tloc; begin diff --git a/compiler/arm/cgcpu.pas b/compiler/arm/cgcpu.pas index 71d984bde9..6a4ed2c12e 100644 --- a/compiler/arm/cgcpu.pas +++ b/compiler/arm/cgcpu.pas @@ -2475,9 +2475,9 @@ unit cgcpu; paraloc1.init; paraloc2.init; paraloc3.init; - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); - paramanager.getintparaloc(pd,3,paraloc3); + paramanager.getintparaloc(list,pd,1,paraloc1); + paramanager.getintparaloc(list,pd,2,paraloc2); + paramanager.getintparaloc(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); diff --git a/compiler/arm/cpupara.pas b/compiler/arm/cpupara.pas index 3fce91dcf1..b2a59813c2 100644 --- a/compiler/arm/cpupara.pas +++ b/compiler/arm/cpupara.pas @@ -28,6 +28,7 @@ unit cpupara; uses globtype,globals, + aasmdata, cpuinfo,cpubase,cgbase,cgutils, symconst,symtype,symdef,parabase,paramgr; @@ -38,7 +39,7 @@ unit cpupara; function get_volatile_registers_mm(calloption : tproccalloption):tcpuregisterset;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(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override; + procedure getintparaloc(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; varargspara:tvarargsparalist):longint;override; function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override; @@ -80,7 +81,7 @@ unit cpupara; end; - procedure tcpuparamanager.getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); + procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); var paraloc : pcgparalocation; psym : tparavarsym; diff --git a/compiler/avr/cgcpu.pas b/compiler/avr/cgcpu.pas index b8c678d8d3..403751cab6 100644 --- a/compiler/avr/cgcpu.pas +++ b/compiler/avr/cgcpu.pas @@ -550,9 +550,9 @@ unit cgcpu; paraloc1.init; paraloc2.init; paraloc3.init; - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); - paramanager.getintparaloc(pd,3,paraloc3); + paramanager.getintparaloc(list,pd,1,paraloc1); + paramanager.getintparaloc(list,pd,2,paraloc2); + paramanager.getintparaloc(list,pd,3,paraloc3); a_load_const_cgpara(list,OS_8,0,paraloc3); a_load_reg_cgpara(list,OS_16,src,paraloc2); a_load_reg_cgpara(list,OS_16,dst,paraloc1); @@ -1629,9 +1629,9 @@ unit cgcpu; paraloc1.init; paraloc2.init; paraloc3.init; - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); - paramanager.getintparaloc(pd,3,paraloc3); + paramanager.getintparaloc(list,pd,1,paraloc1); + paramanager.getintparaloc(list,pd,2,paraloc2); + paramanager.getintparaloc(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); diff --git a/compiler/cgobj.pas b/compiler/cgobj.pas index c4a30977ab..27e1b4bd1d 100644 --- a/compiler/cgobj.pas +++ b/compiler/cgobj.pas @@ -2182,8 +2182,8 @@ implementation if (cs_check_object in current_settings.localswitches) then begin pd:=search_system_proc('fpc_check_object_ext'); - paramanager.getintparaloc(pd,1,cgpara1); - paramanager.getintparaloc(pd,2,cgpara2); + paramanager.getintparaloc(list,pd,1,cgpara1); + paramanager.getintparaloc(list,pd,2,cgpara2); reference_reset_symbol(hrefvmt,current_asmdata.RefAsmSymbol(objdef.vmt_mangledname,AT_DATA),0,sizeof(pint)); if pd.is_pushleftright then begin @@ -2205,7 +2205,7 @@ implementation if (cs_check_range in current_settings.localswitches) then begin pd:=search_system_proc('fpc_check_object'); - paramanager.getintparaloc(pd,1,cgpara1); + paramanager.getintparaloc(list,pd,1,cgpara1); a_load_reg_cgpara(list,OS_ADDR,reg,cgpara1); paramanager.freecgpara(list,cgpara1); allocallcpuregisters(list); diff --git a/compiler/hlcgobj.pas b/compiler/hlcgobj.pas index 1d32b60d23..df728973ee 100644 --- a/compiler/hlcgobj.pas +++ b/compiler/hlcgobj.pas @@ -3116,7 +3116,7 @@ implementation current_asmdata.getjumplabel(oklabel); a_cmp_const_reg_label(list,selftype,OC_NE,0,reg,oklabel); cgpara1.init; - paramanager.getintparaloc(pd,1,cgpara1); + paramanager.getintparaloc(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); @@ -3149,9 +3149,9 @@ implementation cgpara1.init; cgpara2.init; cgpara3.init; - paramanager.getintparaloc(pd,1,cgpara1); - paramanager.getintparaloc(pd,2,cgpara2); - paramanager.getintparaloc(pd,3,cgpara3); + paramanager.getintparaloc(list,pd,1,cgpara1); + paramanager.getintparaloc(list,pd,2,cgpara2); + paramanager.getintparaloc(list,pd,3,cgpara3); if pd.is_pushleftright then begin a_loadaddr_ref_cgpara(list,strdef,dest,cgpara1); @@ -3181,8 +3181,8 @@ implementation pd:=search_system_proc('fpc_variant_copy_overwrite'); cgpara1.init; cgpara2.init; - paramanager.getintparaloc(pd,1,cgpara1); - paramanager.getintparaloc(pd,2,cgpara2); + paramanager.getintparaloc(list,pd,1,cgpara1); + paramanager.getintparaloc(list,pd,2,cgpara2); if pd.is_pushleftright then begin a_loadaddr_ref_cgpara(list,vardef,source,cgpara1); @@ -3225,7 +3225,7 @@ implementation if incrfunc<>'' then begin pd:=search_system_proc(incrfunc); - paramanager.getintparaloc(pd,1,cgpara1); + paramanager.getintparaloc(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 @@ -3239,8 +3239,8 @@ implementation else begin pd:=search_system_proc('fpc_addref'); - paramanager.getintparaloc(pd,1,cgpara1); - paramanager.getintparaloc(pd,2,cgpara2); + paramanager.getintparaloc(list,pd,1,cgpara1); + paramanager.getintparaloc(list,pd,2,cgpara2); if is_open_array(t) then InternalError(201103054); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); @@ -3279,7 +3279,7 @@ implementation else if t.typ=variantdef then begin pd:=search_system_proc('fpc_variant_init'); - paramanager.getintparaloc(pd,1,cgpara1); + paramanager.getintparaloc(list,pd,1,cgpara1); a_loadaddr_ref_cgpara(list,t,ref,cgpara1); paramanager.freecgpara(list,cgpara1); g_call_system_proc(list,pd,[@cgpara1],nil); @@ -3289,8 +3289,8 @@ implementation if is_open_array(t) then InternalError(201103052); pd:=search_system_proc('fpc_initialize'); - paramanager.getintparaloc(pd,1,cgpara1); - paramanager.getintparaloc(pd,2,cgpara2); + paramanager.getintparaloc(list,pd,1,cgpara1); + paramanager.getintparaloc(list,pd,2,cgpara2); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); if pd.is_pushleftright then begin @@ -3339,8 +3339,8 @@ implementation pd:=search_system_proc('fpc_dynarray_clear') else pd:=search_system_proc('fpc_finalize'); - paramanager.getintparaloc(pd,1,cgpara1); - paramanager.getintparaloc(pd,2,cgpara2); + paramanager.getintparaloc(list,pd,1,cgpara1); + paramanager.getintparaloc(list,pd,2,cgpara2); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); if pd.is_pushleftright then begin @@ -3361,7 +3361,7 @@ implementation end; pd:=search_system_proc(decrfunc); cgpara1.init; - paramanager.getintparaloc(pd,1,cgpara1); + paramanager.getintparaloc(list,pd,1,cgpara1); a_loadaddr_ref_cgpara(list,t,ref,cgpara1); paramanager.freecgpara(list,cgpara1); g_call_system_proc(list,pd,[@cgpara1],nil); @@ -3379,9 +3379,9 @@ implementation cgpara2.init; cgpara3.init; pd:=search_system_proc(name); - paramanager.getintparaloc(pd,1,cgpara1); - paramanager.getintparaloc(pd,2,cgpara2); - paramanager.getintparaloc(pd,3,cgpara3); + paramanager.getintparaloc(list,pd,1,cgpara1); + paramanager.getintparaloc(list,pd,2,cgpara2); + paramanager.getintparaloc(list,pd,3,cgpara3); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); { if calling convention is left to right, push parameters 1 and 2 } @@ -3666,7 +3666,7 @@ implementation { do getmem call } pd:=search_system_proc('fpc_getmem'); cgpara1.init; - paramanager.getintparaloc(pd,1,cgpara1); + paramanager.getintparaloc(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); @@ -3681,9 +3681,9 @@ implementation cgpara1.init; cgpara2.init; cgpara3.init; - paramanager.getintparaloc(pd,1,cgpara1); - paramanager.getintparaloc(pd,2,cgpara2); - paramanager.getintparaloc(pd,3,cgpara3); + paramanager.getintparaloc(list,pd,1,cgpara1); + paramanager.getintparaloc(list,pd,2,cgpara2); + paramanager.getintparaloc(list,pd,3,cgpara3); if pd.is_pushleftright then begin { load source } @@ -3720,7 +3720,7 @@ implementation { do freemem call } pd:=search_system_proc('fpc_freemem'); cgpara1.init; - paramanager.getintparaloc(pd,1,cgpara1); + paramanager.getintparaloc(list,pd,1,cgpara1); { load source } a_load_loc_cgpara(list,getpointerdef(arrdef),l,cgpara1); paramanager.freecgpara(list,cgpara1); diff --git a/compiler/i8086/cpupara.pas b/compiler/i8086/cpupara.pas index a7510af9d8..224d6a21f5 100644 --- a/compiler/i8086/cpupara.pas +++ b/compiler/i8086/cpupara.pas @@ -51,7 +51,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(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override; + procedure getintparaloc(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; varargspara:tvarargsparalist):longint;override; procedure createtempparaloc(list: TAsmList;calloption : tproccalloption;parasym : tparavarsym;can_use_final_stack_loc : boolean;var cgpara:TCGPara);override; @@ -227,7 +227,7 @@ unit cpupara; end; - procedure tcpuparamanager.getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); + procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); var paraloc : pcgparalocation; psym: tparavarsym; diff --git a/compiler/i8086/n8086mem.pas b/compiler/i8086/n8086mem.pas index b00e9c9cff..c0f45a1cb8 100644 --- a/compiler/i8086/n8086mem.pas +++ b/compiler/i8086/n8086mem.pas @@ -156,7 +156,7 @@ implementation internalerror(2012010601); pd:=tprocdef(tprocsym(sym).ProcdefList[0]); paraloc1.init; - paramanager.getintparaloc(pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); hlcg.a_load_reg_cgpara(current_asmdata.CurrAsmList,resultdef,location.reference.base,paraloc1); paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); paraloc1.done; diff --git a/compiler/jvm/cpupara.pas b/compiler/jvm/cpupara.pas index 095bfae7f6..14270f2191 100644 --- a/compiler/jvm/cpupara.pas +++ b/compiler/jvm/cpupara.pas @@ -43,7 +43,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(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override; + procedure getintparaloc(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; varargspara:tvarargsparalist):longint;override; function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override; @@ -64,7 +64,7 @@ implementation hlcgobj; - procedure tcpuparamanager.GetIntParaLoc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); + procedure tcpuparamanager.GetIntParaLoc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); begin { not yet implemented/used } internalerror(2010121001); diff --git a/compiler/m68k/cgcpu.pas b/compiler/m68k/cgcpu.pas index ecb7408cea..ce99f5351e 100644 --- a/compiler/m68k/cgcpu.pas +++ b/compiler/m68k/cgcpu.pas @@ -634,9 +634,9 @@ unit cgcpu; paraloc1.init; paraloc2.init; paraloc3.init; - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); - paramanager.getintparaloc(pd,3,paraloc3); + paramanager.getintparaloc(list,pd,1,paraloc1); + paramanager.getintparaloc(list,pd,2,paraloc2); + paramanager.getintparaloc(list,pd,3,paraloc3); a_load_const_cgpara(list,OS_8,0,paraloc3); a_load_const_cgpara(list,size,a,paraloc2); a_load_reg_cgpara(list,OS_32,reg,paraloc1); @@ -669,9 +669,9 @@ unit cgcpu; paraloc1.init; paraloc2.init; paraloc3.init; - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); - paramanager.getintparaloc(pd,3,paraloc3); + paramanager.getintparaloc(list,pd,1,paraloc1); + paramanager.getintparaloc(list,pd,2,paraloc2); + paramanager.getintparaloc(list,pd,3,paraloc3); a_load_const_cgpara(list,OS_8,0,paraloc3); a_load_reg_cgpara(list,OS_32,reg1,paraloc2); a_load_reg_cgpara(list,OS_32,reg2,paraloc1); diff --git a/compiler/mips/cgcpu.pas b/compiler/mips/cgcpu.pas index 857dae03fa..cccdb4cfd4 100644 --- a/compiler/mips/cgcpu.pas +++ b/compiler/mips/cgcpu.pas @@ -1480,9 +1480,9 @@ begin paraloc1.init; paraloc2.init; paraloc3.init; - paramanager.getintparaloc(pd, 1, paraloc1); - paramanager.getintparaloc(pd, 2, paraloc2); - paramanager.getintparaloc(pd, 3, paraloc3); + paramanager.getintparaloc(list, pd, 1, paraloc1); + paramanager.getintparaloc(list, pd, 2, paraloc2); + paramanager.getintparaloc(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); diff --git a/compiler/ncgcal.pas b/compiler/ncgcal.pas index c21a9373a2..f63c50ac0d 100644 --- a/compiler/ncgcal.pas +++ b/compiler/ncgcal.pas @@ -1237,7 +1237,7 @@ implementation begin pd:=search_system_proc('fpc_safecallcheck'); cgpara.init; - paramanager.getintparaloc(pd,1,cgpara); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,cgpara); cg.a_load_reg_cgpara(current_asmdata.CurrAsmList,OS_INT,NR_FUNCTION_RESULT_REG,cgpara); paramanager.freecgpara(current_asmdata.CurrAsmList,cgpara); cg.g_call(current_asmdata.CurrAsmList,'FPC_SAFECALLCHECK'); diff --git a/compiler/ncgflw.pas b/compiler/ncgflw.pas index 17b4412135..3de52669a1 100644 --- a/compiler/ncgflw.pas +++ b/compiler/ncgflw.pas @@ -1268,7 +1268,7 @@ implementation { send the vmt parameter } pd:=search_system_proc('fpc_catches'); reference_reset_symbol(href2,current_asmdata.RefAsmSymbol(excepttype.vmt_mangledname,AT_DATA),0,sizeof(pint)); - paramanager.getintparaloc(pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); cg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,href2,paraloc1); paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); fpc_catches_res:=hlcg.g_call_system_proc(current_asmdata.CurrAsmList,pd,[@paraloc1],nil); @@ -1387,7 +1387,7 @@ implementation nil otherwise. } pd:=search_system_proc('fpc_safecallhandler'); cgpara.init; - paramanager.getintparaloc(pd,1,cgpara); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,cgpara); if is_class(current_procinfo.procdef.struct) then begin selfsym:=tparavarsym(current_procinfo.procdef.parast.Find('self')); diff --git a/compiler/ncgld.pas b/compiler/ncgld.pas index a5a4057368..be76e75023 100644 --- a/compiler/ncgld.pas +++ b/compiler/ncgld.pas @@ -326,7 +326,7 @@ implementation begin paraloc1.init; pd:=search_system_proc('fpc_tls_add'); - paramanager.getintparaloc(pd,1,paraloc1); + paramanager.getintparaloc(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),0,sizeof(pint)) else @@ -377,7 +377,7 @@ implementation if pvd.typ<>procvardef then internalerror(2012120901); paraloc1.init; - paramanager.getintparaloc(tprocvardef(pvd),1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1); hregister:=hlcg.getaddressregister(current_asmdata.CurrAsmList,pvd); reference_reset_symbol(href,current_asmdata.RefAsmSymbol('FPC_THREADVAR_RELOCATE'),0,pvd.size); hlcg.a_load_ref_reg(current_asmdata.CurrAsmList,pvd,pvd,href,hregister); diff --git a/compiler/ncgmat.pas b/compiler/ncgmat.pas index 54ece4b763..96eb16a73d 100644 --- a/compiler/ncgmat.pas +++ b/compiler/ncgmat.pas @@ -426,7 +426,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(pd,1,paraloc1); + paramanager.getintparaloc(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); diff --git a/compiler/ncgmem.pas b/compiler/ncgmem.pas index a246def8e2..2c27364516 100644 --- a/compiler/ncgmem.pas +++ b/compiler/ncgmem.pas @@ -305,7 +305,7 @@ implementation internalerror(2012010601); pd:=tprocdef(tprocsym(sym).ProcdefList[0]); paraloc1.init; - paramanager.getintparaloc(pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); hlcg.a_load_reg_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference.base,paraloc1); paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); paraloc1.done; @@ -393,7 +393,7 @@ implementation (sym.typ<>procsym) then internalerror(2012010602); pd:=tprocdef(tprocsym(sym).ProcdefList[0]); - paramanager.getintparaloc(pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); hlcg.a_load_reg_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference.base,paraloc1); paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); hlcg.allocallcpuregisters(current_asmdata.CurrAsmList); @@ -778,8 +778,8 @@ implementation if is_dynamic_array(left.resultdef) then begin pd:=search_system_proc('fpc_dynarray_rangecheck'); - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2); if pd.is_pushleftright then begin cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1); @@ -820,8 +820,8 @@ implementation begin helpername:='fpc_'+tstringdef(left.resultdef).stringtypname+'_rangecheck'; pd:=search_system_proc(helpername); - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2); if pd.is_pushleftright then begin cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1); diff --git a/compiler/ncgutil.pas b/compiler/ncgutil.pas index 4c41acfc74..bf67368a08 100644 --- a/compiler/ncgutil.pas +++ b/compiler/ncgutil.pas @@ -413,9 +413,9 @@ implementation { fpc_pushexceptaddr(exceptionframetype, setjmp_buffer, exception_address_chain_entry) } pd:=search_system_proc('fpc_pushexceptaddr'); - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); - paramanager.getintparaloc(pd,3,paraloc3); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,3,paraloc3); if pd.is_pushleftright then begin { type of exceptionframe } @@ -445,7 +445,7 @@ implementation { fpc_setjmp(result_of_pushexceptaddr_call) } pd:=search_system_proc('fpc_setjmp'); - paramanager.getintparaloc(pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); hlcg.a_load_reg_cgpara(list,pushexceptres.def,tmpresloc.register,paraloc1); paramanager.freecgpara(list,paraloc1); @@ -1393,7 +1393,7 @@ implementation begin pd:=search_system_proc('fpc_stackcheck'); paraloc1.init; - paramanager.getintparaloc(pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); cg.a_load_const_cgpara(list,OS_INT,current_procinfo.calc_stackframe_size,paraloc1); paramanager.freecgpara(list,paraloc1); paraloc1.done; @@ -1408,7 +1408,7 @@ implementation pd:=search_system_proc('fpc_stackcheck'); paraloc1.init; { Also alloc the register needed for the parameter } - paramanager.getintparaloc(pd,1,paraloc1); + paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1); paramanager.freecgpara(list,paraloc1); { Call the helper } cg.allocallcpuregisters(list); diff --git a/compiler/paramgr.pas b/compiler/paramgr.pas index bb634564a6..dc2197ac1e 100644 --- a/compiler/paramgr.pas +++ b/compiler/paramgr.pas @@ -81,7 +81,7 @@ unit paramgr; function get_volatile_registers_flags(calloption : tproccalloption):tcpuregisterset;virtual; function get_volatile_registers_mm(calloption : tproccalloption):tcpuregisterset;virtual; - procedure getintparaloc(pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);virtual; + procedure getintparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);virtual; {# allocate an individual pcgparalocation that's part of a tcgpara @@ -624,7 +624,7 @@ implementation end; - procedure tparamanager.getintparaloc(pd: tabstractprocdef; nr : longint; var cgpara: tcgpara); + procedure tparamanager.getintparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara); begin if (nr<1) or (nr>pd.paras.count) then InternalError(2013060101); diff --git a/compiler/powerpc/cpupara.pas b/compiler/powerpc/cpupara.pas index 384f1aa8a4..ed190d59b2 100644 --- a/compiler/powerpc/cpupara.pas +++ b/compiler/powerpc/cpupara.pas @@ -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(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override; + procedure getintparaloc(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; varargspara:tvarargsparalist):longint;override; function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override; @@ -78,7 +78,7 @@ unit cpupara; end; - procedure tcpuparamanager.getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); + procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); var paraloc : pcgparalocation; psym : tparavarsym; diff --git a/compiler/powerpc64/cpupara.pas b/compiler/powerpc64/cpupara.pas index ce89419855..b8d6300d54 100644 --- a/compiler/powerpc64/cpupara.pas +++ b/compiler/powerpc64/cpupara.pas @@ -41,7 +41,7 @@ type tproccalloption): boolean; override; function ret_in_param(def: tdef; pd: tabstractprocdef): boolean; override; - procedure getintparaloc(pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); override; + procedure getintparaloc(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; varargspara: tvarargsparalist): longint; override; @@ -79,7 +79,7 @@ begin result := [RS_F0..RS_F13]; end; -procedure tcpuparamanager.getintparaloc(pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); +procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); var paraloc: pcgparalocation; psym: tparavarsym; diff --git a/compiler/ppcgen/cgppc.pas b/compiler/ppcgen/cgppc.pas index 7e0cf30111..c570b5c1f0 100644 --- a/compiler/ppcgen/cgppc.pas +++ b/compiler/ppcgen/cgppc.pas @@ -692,7 +692,7 @@ unit cgppc; begin pd:=search_system_proc('mcount'); paraloc1.init; - paramanager.getintparaloc(pd,1,paraloc1); + paramanager.getintparaloc(list,pd,1,paraloc1); a_load_reg_cgpara(list,OS_ADDR,NR_R0,paraloc1); paramanager.freecgpara(list,paraloc1); paraloc1.done; diff --git a/compiler/sparc/cgcpu.pas b/compiler/sparc/cgcpu.pas index 740605b104..afdee592ca 100644 --- a/compiler/sparc/cgcpu.pas +++ b/compiler/sparc/cgcpu.pas @@ -1102,9 +1102,9 @@ implementation paraloc1.init; paraloc2.init; paraloc3.init; - paramanager.getintparaloc(pd,1,paraloc1); - paramanager.getintparaloc(pd,2,paraloc2); - paramanager.getintparaloc(pd,3,paraloc3); + paramanager.getintparaloc(list,pd,1,paraloc1); + paramanager.getintparaloc(list,pd,2,paraloc2); + paramanager.getintparaloc(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); diff --git a/compiler/vis/cpupara.pas b/compiler/vis/cpupara.pas index f55a93ced6..426ee98bf2 100644 --- a/compiler/vis/cpupara.pas +++ b/compiler/vis/cpupara.pas @@ -39,7 +39,6 @@ unit cpupara; rtl are used. } tcpuparamanager = class(tparamanager) - function getintparaloc(nr : longint) : tparalocation;override; procedure create_param_loc_info(p : tabstractprocdef);override; function getselflocation(p : tabstractprocdef) : tparalocation;override; end; @@ -54,10 +53,6 @@ unit cpupara; cpuinfo,cginfo,cgbase, defutil; - function tcpuparamanager.getintparaloc(nr : longint) : tparalocation; - begin - end; - procedure tcpuparamanager.create_param_loc_info(p : tabstractprocdef); var param_offset : integer; diff --git a/compiler/x86_64/cgcpu.pas b/compiler/x86_64/cgcpu.pas index 4387c26425..8435440540 100644 --- a/compiler/x86_64/cgcpu.pas +++ b/compiler/x86_64/cgcpu.pas @@ -438,8 +438,8 @@ unit cgcpu; pd:=search_system_proc('_fpc_local_unwind'); para1.init; para2.init; - paramanager.getintparaloc(pd,1,para1); - paramanager.getintparaloc(pd,2,para2); + paramanager.getintparaloc(list,pd,1,para1); + paramanager.getintparaloc(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) }