+ added tasmlist parameter to getintparaloc() (needed for llvm)

git-svn-id: trunk@30429 -
This commit is contained in:
Jonas Maebe 2015-04-04 14:29:16 +00:00
parent 2336d22985
commit 61e4a1b811
25 changed files with 85 additions and 109 deletions

View File

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

View File

@ -32,7 +32,6 @@ unit cpupara;
type type
tcpuparamanager = class(tparamanager) tcpuparamanager = class(tparamanager)
function getintparaloc(nr : longint) : tparalocation;override;
procedure create_param_loc_info(p : tabstractprocdef);override; procedure create_param_loc_info(p : tabstractprocdef);override;
function getfuncretparaloc(p : tabstractprocdef) : tparalocation;override; function getfuncretparaloc(p : tabstractprocdef) : tparalocation;override;
end; end;
@ -45,25 +44,6 @@ unit cpupara;
cpuinfo,cginfo,cgbase, cpuinfo,cginfo,cgbase,
defbase; 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; function getparaloc(p : tdef) : tloc;
begin begin

View File

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

View File

@ -28,6 +28,7 @@ unit cpupara;
uses uses
globtype,globals, globtype,globals,
aasmdata,
cpuinfo,cpubase,cgbase,cgutils, cpuinfo,cpubase,cgbase,cgutils,
symconst,symtype,symdef,parabase,paramgr; symconst,symtype,symdef,parabase,paramgr;
@ -38,7 +39,7 @@ unit cpupara;
function get_volatile_registers_mm(calloption : tproccalloption):tcpuregisterset;override; function get_volatile_registers_mm(calloption : tproccalloption):tcpuregisterset;override;
function push_addr_param(varspez:tvarspez;def : tdef;calloption : tproccalloption) : boolean;override; function push_addr_param(varspez:tvarspez;def : tdef;calloption : tproccalloption) : boolean;override;
function ret_in_param(def:tdef;pd:tabstractprocdef):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_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
function create_varargs_paraloc_info(p : tabstractprocdef; varargspara:tvarargsparalist):longint;override; function create_varargs_paraloc_info(p : tabstractprocdef; 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;
@ -80,7 +81,7 @@ unit cpupara;
end; end;
procedure tcpuparamanager.getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
var var
paraloc : pcgparalocation; paraloc : pcgparalocation;
psym : tparavarsym; psym : tparavarsym;

View File

@ -550,9 +550,9 @@ unit cgcpu;
paraloc1.init; paraloc1.init;
paraloc2.init; paraloc2.init;
paraloc3.init; paraloc3.init;
paramanager.getintparaloc(pd,1,paraloc1); paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(pd,2,paraloc2); paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getintparaloc(pd,3,paraloc3); paramanager.getintparaloc(list,pd,3,paraloc3);
a_load_const_cgpara(list,OS_8,0,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,src,paraloc2);
a_load_reg_cgpara(list,OS_16,dst,paraloc1); a_load_reg_cgpara(list,OS_16,dst,paraloc1);
@ -1629,9 +1629,9 @@ unit cgcpu;
paraloc1.init; paraloc1.init;
paraloc2.init; paraloc2.init;
paraloc3.init; paraloc3.init;
paramanager.getintparaloc(pd,1,paraloc1); paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(pd,2,paraloc2); paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getintparaloc(pd,3,paraloc3); paramanager.getintparaloc(list,pd,3,paraloc3);
a_load_const_cgpara(list,OS_SINT,len,paraloc3); a_load_const_cgpara(list,OS_SINT,len,paraloc3);
a_loadaddr_ref_cgpara(list,dest,paraloc2); a_loadaddr_ref_cgpara(list,dest,paraloc2);
a_loadaddr_ref_cgpara(list,source,paraloc1); a_loadaddr_ref_cgpara(list,source,paraloc1);

View File

@ -2182,8 +2182,8 @@ implementation
if (cs_check_object in current_settings.localswitches) then if (cs_check_object in current_settings.localswitches) then
begin begin
pd:=search_system_proc('fpc_check_object_ext'); pd:=search_system_proc('fpc_check_object_ext');
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(pd,2,cgpara2); paramanager.getintparaloc(list,pd,2,cgpara2);
reference_reset_symbol(hrefvmt,current_asmdata.RefAsmSymbol(objdef.vmt_mangledname,AT_DATA),0,sizeof(pint)); reference_reset_symbol(hrefvmt,current_asmdata.RefAsmSymbol(objdef.vmt_mangledname,AT_DATA),0,sizeof(pint));
if pd.is_pushleftright then if pd.is_pushleftright then
begin begin
@ -2205,7 +2205,7 @@ implementation
if (cs_check_range in current_settings.localswitches) then if (cs_check_range in current_settings.localswitches) then
begin begin
pd:=search_system_proc('fpc_check_object'); 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); a_load_reg_cgpara(list,OS_ADDR,reg,cgpara1);
paramanager.freecgpara(list,cgpara1); paramanager.freecgpara(list,cgpara1);
allocallcpuregisters(list); allocallcpuregisters(list);

View File

@ -3116,7 +3116,7 @@ implementation
current_asmdata.getjumplabel(oklabel); current_asmdata.getjumplabel(oklabel);
a_cmp_const_reg_label(list,selftype,OC_NE,0,reg,oklabel); a_cmp_const_reg_label(list,selftype,OC_NE,0,reg,oklabel);
cgpara1.init; cgpara1.init;
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
a_load_const_cgpara(list,s32inttype,aint(210),cgpara1); a_load_const_cgpara(list,s32inttype,aint(210),cgpara1);
paramanager.freecgpara(list,cgpara1); paramanager.freecgpara(list,cgpara1);
g_call_system_proc(list,pd,[@cgpara1],nil); g_call_system_proc(list,pd,[@cgpara1],nil);
@ -3149,9 +3149,9 @@ implementation
cgpara1.init; cgpara1.init;
cgpara2.init; cgpara2.init;
cgpara3.init; cgpara3.init;
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(pd,2,cgpara2); paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getintparaloc(pd,3,cgpara3); paramanager.getintparaloc(list,pd,3,cgpara3);
if pd.is_pushleftright then if pd.is_pushleftright then
begin begin
a_loadaddr_ref_cgpara(list,strdef,dest,cgpara1); a_loadaddr_ref_cgpara(list,strdef,dest,cgpara1);
@ -3181,8 +3181,8 @@ implementation
pd:=search_system_proc('fpc_variant_copy_overwrite'); pd:=search_system_proc('fpc_variant_copy_overwrite');
cgpara1.init; cgpara1.init;
cgpara2.init; cgpara2.init;
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(pd,2,cgpara2); paramanager.getintparaloc(list,pd,2,cgpara2);
if pd.is_pushleftright then if pd.is_pushleftright then
begin begin
a_loadaddr_ref_cgpara(list,vardef,source,cgpara1); a_loadaddr_ref_cgpara(list,vardef,source,cgpara1);
@ -3225,7 +3225,7 @@ implementation
if incrfunc<>'' then if incrfunc<>'' then
begin begin
pd:=search_system_proc(incrfunc); 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 { widestrings aren't ref. counted on all platforms so we need the address
to create a real copy } to create a real copy }
if is_widestring(t) then if is_widestring(t) then
@ -3239,8 +3239,8 @@ implementation
else else
begin begin
pd:=search_system_proc('fpc_addref'); pd:=search_system_proc('fpc_addref');
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(pd,2,cgpara2); paramanager.getintparaloc(list,pd,2,cgpara2);
if is_open_array(t) then if is_open_array(t) then
InternalError(201103054); InternalError(201103054);
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint));
@ -3279,7 +3279,7 @@ implementation
else if t.typ=variantdef then else if t.typ=variantdef then
begin begin
pd:=search_system_proc('fpc_variant_init'); 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); a_loadaddr_ref_cgpara(list,t,ref,cgpara1);
paramanager.freecgpara(list,cgpara1); paramanager.freecgpara(list,cgpara1);
g_call_system_proc(list,pd,[@cgpara1],nil); g_call_system_proc(list,pd,[@cgpara1],nil);
@ -3289,8 +3289,8 @@ implementation
if is_open_array(t) then if is_open_array(t) then
InternalError(201103052); InternalError(201103052);
pd:=search_system_proc('fpc_initialize'); pd:=search_system_proc('fpc_initialize');
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(pd,2,cgpara2); paramanager.getintparaloc(list,pd,2,cgpara2);
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint));
if pd.is_pushleftright then if pd.is_pushleftright then
begin begin
@ -3339,8 +3339,8 @@ implementation
pd:=search_system_proc('fpc_dynarray_clear') pd:=search_system_proc('fpc_dynarray_clear')
else else
pd:=search_system_proc('fpc_finalize'); pd:=search_system_proc('fpc_finalize');
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(pd,2,cgpara2); paramanager.getintparaloc(list,pd,2,cgpara2);
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint));
if pd.is_pushleftright then if pd.is_pushleftright then
begin begin
@ -3361,7 +3361,7 @@ implementation
end; end;
pd:=search_system_proc(decrfunc); pd:=search_system_proc(decrfunc);
cgpara1.init; cgpara1.init;
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
a_loadaddr_ref_cgpara(list,t,ref,cgpara1); a_loadaddr_ref_cgpara(list,t,ref,cgpara1);
paramanager.freecgpara(list,cgpara1); paramanager.freecgpara(list,cgpara1);
g_call_system_proc(list,pd,[@cgpara1],nil); g_call_system_proc(list,pd,[@cgpara1],nil);
@ -3379,9 +3379,9 @@ implementation
cgpara2.init; cgpara2.init;
cgpara3.init; cgpara3.init;
pd:=search_system_proc(name); pd:=search_system_proc(name);
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(pd,2,cgpara2); paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getintparaloc(pd,3,cgpara3); paramanager.getintparaloc(list,pd,3,cgpara3);
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti),0,sizeof(pint)); 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 } { if calling convention is left to right, push parameters 1 and 2 }
@ -3666,7 +3666,7 @@ implementation
{ do getmem call } { do getmem call }
pd:=search_system_proc('fpc_getmem'); pd:=search_system_proc('fpc_getmem');
cgpara1.init; cgpara1.init;
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
a_load_reg_cgpara(list,sinttype,sizereg,cgpara1); a_load_reg_cgpara(list,sinttype,sizereg,cgpara1);
paramanager.freecgpara(list,cgpara1); paramanager.freecgpara(list,cgpara1);
getmemres:=g_call_system_proc(list,pd,[@cgpara1],ptrarrdef); getmemres:=g_call_system_proc(list,pd,[@cgpara1],ptrarrdef);
@ -3681,9 +3681,9 @@ implementation
cgpara1.init; cgpara1.init;
cgpara2.init; cgpara2.init;
cgpara3.init; cgpara3.init;
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
paramanager.getintparaloc(pd,2,cgpara2); paramanager.getintparaloc(list,pd,2,cgpara2);
paramanager.getintparaloc(pd,3,cgpara3); paramanager.getintparaloc(list,pd,3,cgpara3);
if pd.is_pushleftright then if pd.is_pushleftright then
begin begin
{ load source } { load source }
@ -3720,7 +3720,7 @@ implementation
{ do freemem call } { do freemem call }
pd:=search_system_proc('fpc_freemem'); pd:=search_system_proc('fpc_freemem');
cgpara1.init; cgpara1.init;
paramanager.getintparaloc(pd,1,cgpara1); paramanager.getintparaloc(list,pd,1,cgpara1);
{ load source } { load source }
a_load_loc_cgpara(list,getpointerdef(arrdef),l,cgpara1); a_load_loc_cgpara(list,getpointerdef(arrdef),l,cgpara1);
paramanager.freecgpara(list,cgpara1); paramanager.freecgpara(list,cgpara1);

View File

@ -51,7 +51,7 @@ unit cpupara;
other memory models, this mechanism has to be extended somehow to other memory models, this mechanism has to be extended somehow to
support 32-bit addresses on a 16-bit CPU. 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_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
function create_varargs_paraloc_info(p : tabstractprocdef; varargspara:tvarargsparalist):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; 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; end;
procedure tcpuparamanager.getintparaloc(pd : tabstractprocdef; nr : longint; var cgpara : tcgpara); procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
var var
paraloc : pcgparalocation; paraloc : pcgparalocation;
psym: tparavarsym; psym: tparavarsym;

View File

@ -156,7 +156,7 @@ implementation
internalerror(2012010601); internalerror(2012010601);
pd:=tprocdef(tprocsym(sym).ProcdefList[0]); pd:=tprocdef(tprocsym(sym).ProcdefList[0]);
paraloc1.init; 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); hlcg.a_load_reg_cgpara(current_asmdata.CurrAsmList,resultdef,location.reference.base,paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
paraloc1.done; paraloc1.done;

View File

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

View File

@ -634,9 +634,9 @@ unit cgcpu;
paraloc1.init; paraloc1.init;
paraloc2.init; paraloc2.init;
paraloc3.init; paraloc3.init;
paramanager.getintparaloc(pd,1,paraloc1); paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(pd,2,paraloc2); paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getintparaloc(pd,3,paraloc3); paramanager.getintparaloc(list,pd,3,paraloc3);
a_load_const_cgpara(list,OS_8,0,paraloc3); a_load_const_cgpara(list,OS_8,0,paraloc3);
a_load_const_cgpara(list,size,a,paraloc2); a_load_const_cgpara(list,size,a,paraloc2);
a_load_reg_cgpara(list,OS_32,reg,paraloc1); a_load_reg_cgpara(list,OS_32,reg,paraloc1);
@ -669,9 +669,9 @@ unit cgcpu;
paraloc1.init; paraloc1.init;
paraloc2.init; paraloc2.init;
paraloc3.init; paraloc3.init;
paramanager.getintparaloc(pd,1,paraloc1); paramanager.getintparaloc(list,pd,1,paraloc1);
paramanager.getintparaloc(pd,2,paraloc2); paramanager.getintparaloc(list,pd,2,paraloc2);
paramanager.getintparaloc(pd,3,paraloc3); paramanager.getintparaloc(list,pd,3,paraloc3);
a_load_const_cgpara(list,OS_8,0,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,reg1,paraloc2);
a_load_reg_cgpara(list,OS_32,reg2,paraloc1); a_load_reg_cgpara(list,OS_32,reg2,paraloc1);

View File

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

View File

@ -1237,7 +1237,7 @@ implementation
begin begin
pd:=search_system_proc('fpc_safecallcheck'); pd:=search_system_proc('fpc_safecallcheck');
cgpara.init; 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); cg.a_load_reg_cgpara(current_asmdata.CurrAsmList,OS_INT,NR_FUNCTION_RESULT_REG,cgpara);
paramanager.freecgpara(current_asmdata.CurrAsmList,cgpara); paramanager.freecgpara(current_asmdata.CurrAsmList,cgpara);
cg.g_call(current_asmdata.CurrAsmList,'FPC_SAFECALLCHECK'); cg.g_call(current_asmdata.CurrAsmList,'FPC_SAFECALLCHECK');

View File

@ -1268,7 +1268,7 @@ implementation
{ send the vmt parameter } { send the vmt parameter }
pd:=search_system_proc('fpc_catches'); pd:=search_system_proc('fpc_catches');
reference_reset_symbol(href2,current_asmdata.RefAsmSymbol(excepttype.vmt_mangledname,AT_DATA),0,sizeof(pint)); 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); cg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,href2,paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
fpc_catches_res:=hlcg.g_call_system_proc(current_asmdata.CurrAsmList,pd,[@paraloc1],nil); fpc_catches_res:=hlcg.g_call_system_proc(current_asmdata.CurrAsmList,pd,[@paraloc1],nil);
@ -1387,7 +1387,7 @@ implementation
nil otherwise. } nil otherwise. }
pd:=search_system_proc('fpc_safecallhandler'); pd:=search_system_proc('fpc_safecallhandler');
cgpara.init; cgpara.init;
paramanager.getintparaloc(pd,1,cgpara); paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,cgpara);
if is_class(current_procinfo.procdef.struct) then if is_class(current_procinfo.procdef.struct) then
begin begin
selfsym:=tparavarsym(current_procinfo.procdef.parast.Find('self')); selfsym:=tparavarsym(current_procinfo.procdef.parast.Find('self'));

View File

@ -326,7 +326,7 @@ implementation
begin begin
paraloc1.init; paraloc1.init;
pd:=search_system_proc('fpc_tls_add'); 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 if not(vo_is_weak_external in gvs.varoptions) then
reference_reset_symbol(href,current_asmdata.RefAsmSymbol(gvs.mangledname),0,sizeof(pint)) reference_reset_symbol(href,current_asmdata.RefAsmSymbol(gvs.mangledname),0,sizeof(pint))
else else
@ -377,7 +377,7 @@ implementation
if pvd.typ<>procvardef then if pvd.typ<>procvardef then
internalerror(2012120901); internalerror(2012120901);
paraloc1.init; paraloc1.init;
paramanager.getintparaloc(tprocvardef(pvd),1,paraloc1); paramanager.getintparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1);
hregister:=hlcg.getaddressregister(current_asmdata.CurrAsmList,pvd); hregister:=hlcg.getaddressregister(current_asmdata.CurrAsmList,pvd);
reference_reset_symbol(href,current_asmdata.RefAsmSymbol('FPC_THREADVAR_RELOCATE'),0,pvd.size); 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); hlcg.a_load_ref_reg(current_asmdata.CurrAsmList,pvd,pvd,href,hregister);

View File

@ -426,7 +426,7 @@ implementation
cg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,OS_INT,OC_NE,0,hdenom,hl); cg.a_cmp_const_reg_label(current_asmdata.CurrAsmList,OS_INT,OC_NE,0,hdenom,hl);
paraloc1.init; paraloc1.init;
pd:=search_system_proc('fpc_handleerror'); 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); cg.a_load_const_cgpara(current_asmdata.CurrAsmList,OS_S32,aint(200),paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
cg.a_call_name(current_asmdata.CurrAsmList,'FPC_HANDLEERROR',false); cg.a_call_name(current_asmdata.CurrAsmList,'FPC_HANDLEERROR',false);

View File

@ -305,7 +305,7 @@ implementation
internalerror(2012010601); internalerror(2012010601);
pd:=tprocdef(tprocsym(sym).ProcdefList[0]); pd:=tprocdef(tprocsym(sym).ProcdefList[0]);
paraloc1.init; 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); hlcg.a_load_reg_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference.base,paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
paraloc1.done; paraloc1.done;
@ -393,7 +393,7 @@ implementation
(sym.typ<>procsym) then (sym.typ<>procsym) then
internalerror(2012010602); internalerror(2012010602);
pd:=tprocdef(tprocsym(sym).ProcdefList[0]); 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); hlcg.a_load_reg_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference.base,paraloc1);
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1); paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
hlcg.allocallcpuregisters(current_asmdata.CurrAsmList); hlcg.allocallcpuregisters(current_asmdata.CurrAsmList);
@ -778,8 +778,8 @@ implementation
if is_dynamic_array(left.resultdef) then if is_dynamic_array(left.resultdef) then
begin begin
pd:=search_system_proc('fpc_dynarray_rangecheck'); pd:=search_system_proc('fpc_dynarray_rangecheck');
paramanager.getintparaloc(pd,1,paraloc1); paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getintparaloc(pd,2,paraloc2); paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
if pd.is_pushleftright then if pd.is_pushleftright then
begin begin
cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1); cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1);
@ -820,8 +820,8 @@ implementation
begin begin
helpername:='fpc_'+tstringdef(left.resultdef).stringtypname+'_rangecheck'; helpername:='fpc_'+tstringdef(left.resultdef).stringtypname+'_rangecheck';
pd:=search_system_proc(helpername); pd:=search_system_proc(helpername);
paramanager.getintparaloc(pd,1,paraloc1); paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getintparaloc(pd,2,paraloc2); paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
if pd.is_pushleftright then if pd.is_pushleftright then
begin begin
cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1); cg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.location,paraloc1);

View File

@ -413,9 +413,9 @@ implementation
{ fpc_pushexceptaddr(exceptionframetype, setjmp_buffer, exception_address_chain_entry) } { fpc_pushexceptaddr(exceptionframetype, setjmp_buffer, exception_address_chain_entry) }
pd:=search_system_proc('fpc_pushexceptaddr'); pd:=search_system_proc('fpc_pushexceptaddr');
paramanager.getintparaloc(pd,1,paraloc1); paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
paramanager.getintparaloc(pd,2,paraloc2); paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
paramanager.getintparaloc(pd,3,paraloc3); paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,3,paraloc3);
if pd.is_pushleftright then if pd.is_pushleftright then
begin begin
{ type of exceptionframe } { type of exceptionframe }
@ -445,7 +445,7 @@ implementation
{ fpc_setjmp(result_of_pushexceptaddr_call) } { fpc_setjmp(result_of_pushexceptaddr_call) }
pd:=search_system_proc('fpc_setjmp'); 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); hlcg.a_load_reg_cgpara(list,pushexceptres.def,tmpresloc.register,paraloc1);
paramanager.freecgpara(list,paraloc1); paramanager.freecgpara(list,paraloc1);
@ -1393,7 +1393,7 @@ implementation
begin begin
pd:=search_system_proc('fpc_stackcheck'); pd:=search_system_proc('fpc_stackcheck');
paraloc1.init; 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); cg.a_load_const_cgpara(list,OS_INT,current_procinfo.calc_stackframe_size,paraloc1);
paramanager.freecgpara(list,paraloc1); paramanager.freecgpara(list,paraloc1);
paraloc1.done; paraloc1.done;
@ -1408,7 +1408,7 @@ implementation
pd:=search_system_proc('fpc_stackcheck'); pd:=search_system_proc('fpc_stackcheck');
paraloc1.init; paraloc1.init;
{ Also alloc the register needed for the parameter } { 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); paramanager.freecgpara(list,paraloc1);
{ Call the helper } { Call the helper }
cg.allocallcpuregisters(list); cg.allocallcpuregisters(list);

View File

@ -81,7 +81,7 @@ unit paramgr;
function get_volatile_registers_flags(calloption : tproccalloption):tcpuregisterset;virtual; function get_volatile_registers_flags(calloption : tproccalloption):tcpuregisterset;virtual;
function get_volatile_registers_mm(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 {# allocate an individual pcgparalocation that's part of a tcgpara
@ -624,7 +624,7 @@ implementation
end; end;
procedure tparamanager.getintparaloc(pd: tabstractprocdef; nr : longint; var cgpara: tcgpara); procedure tparamanager.getintparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);
begin begin
if (nr<1) or (nr>pd.paras.count) then if (nr<1) or (nr>pd.paras.count) then
InternalError(2013060101); InternalError(2013060101);

View File

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

View File

@ -41,7 +41,7 @@ type
tproccalloption): boolean; override; tproccalloption): boolean; override;
function ret_in_param(def: tdef; pd: tabstractprocdef): 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_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint; override;
function create_varargs_paraloc_info(p: tabstractprocdef; varargspara: function create_varargs_paraloc_info(p: tabstractprocdef; varargspara:
tvarargsparalist): longint; override; tvarargsparalist): longint; override;
@ -79,7 +79,7 @@ begin
result := [RS_F0..RS_F13]; result := [RS_F0..RS_F13];
end; end;
procedure tcpuparamanager.getintparaloc(pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
var var
paraloc: pcgparalocation; paraloc: pcgparalocation;
psym: tparavarsym; psym: tparavarsym;

View File

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

View File

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

View File

@ -39,7 +39,6 @@ unit cpupara;
rtl are used. rtl are used.
} }
tcpuparamanager = class(tparamanager) tcpuparamanager = class(tparamanager)
function getintparaloc(nr : longint) : tparalocation;override;
procedure create_param_loc_info(p : tabstractprocdef);override; procedure create_param_loc_info(p : tabstractprocdef);override;
function getselflocation(p : tabstractprocdef) : tparalocation;override; function getselflocation(p : tabstractprocdef) : tparalocation;override;
end; end;
@ -54,10 +53,6 @@ unit cpupara;
cpuinfo,cginfo,cgbase, cpuinfo,cginfo,cgbase,
defutil; defutil;
function tcpuparamanager.getintparaloc(nr : longint) : tparalocation;
begin
end;
procedure tcpuparamanager.create_param_loc_info(p : tabstractprocdef); procedure tcpuparamanager.create_param_loc_info(p : tabstractprocdef);
var var
param_offset : integer; param_offset : integer;

View File

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