mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-16 03:49:08 +02:00
+ added tasmlist parameter to getintparaloc() (needed for llvm)
git-svn-id: trunk@30429 -
This commit is contained in:
parent
2336d22985
commit
61e4a1b811
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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');
|
||||
|
@ -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'));
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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) }
|
||||
|
Loading…
Reference in New Issue
Block a user