mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-22 02:49:28 +02:00
* renamed getintparaloc to getcgtempparaloc
o it can be used for more than integer parameters git-svn-id: trunk@43781 -
This commit is contained in:
parent
9853ed53e8
commit
1e3f72403e
@ -1800,9 +1800,9 @@ implementation
|
|||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paraloc3.init;
|
paraloc3.init;
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(list,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
|
||||||
paramanager.getintparaloc(list,pd,3,paraloc3);
|
paramanager.getcgtempparaloc(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);
|
||||||
|
@ -2611,9 +2611,9 @@ unit cgcpu;
|
|||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paraloc3.init;
|
paraloc3.init;
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(list,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
|
||||||
paramanager.getintparaloc(list,pd,3,paraloc3);
|
paramanager.getcgtempparaloc(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);
|
||||||
|
@ -40,7 +40,7 @@ unit cpupara;
|
|||||||
function get_saved_registers_int(calloption : tproccalloption):tcpuregisterarray;override;
|
function get_saved_registers_int(calloption : tproccalloption):tcpuregisterarray;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(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
||||||
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
|
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
|
||||||
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
||||||
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
||||||
@ -94,7 +94,7 @@ unit cpupara;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
||||||
var
|
var
|
||||||
paraloc : pcgparalocation;
|
paraloc : pcgparalocation;
|
||||||
psym : tparavarsym;
|
psym : tparavarsym;
|
||||||
|
@ -2101,8 +2101,8 @@ unit cgcpu;
|
|||||||
pd:=search_system_proc(name);
|
pd:=search_system_proc(name);
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(list,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
|
||||||
a_load_reg_cgpara(list,OS_8,src1,paraloc2);
|
a_load_reg_cgpara(list,OS_8,src1,paraloc2);
|
||||||
a_load_reg_cgpara(list,OS_8,src2,paraloc1);
|
a_load_reg_cgpara(list,OS_8,src2,paraloc1);
|
||||||
paramanager.freecgpara(list,paraloc2);
|
paramanager.freecgpara(list,paraloc2);
|
||||||
@ -2198,8 +2198,8 @@ unit cgcpu;
|
|||||||
pd:=search_system_proc(name);
|
pd:=search_system_proc(name);
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(list,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
|
||||||
a_load_reg_cgpara(list,OS_16,src1,paraloc2);
|
a_load_reg_cgpara(list,OS_16,src1,paraloc2);
|
||||||
a_load_reg_cgpara(list,OS_16,src2,paraloc1);
|
a_load_reg_cgpara(list,OS_16,src2,paraloc1);
|
||||||
paramanager.freecgpara(list,paraloc2);
|
paramanager.freecgpara(list,paraloc2);
|
||||||
@ -2445,9 +2445,9 @@ unit cgcpu;
|
|||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paraloc3.init;
|
paraloc3.init;
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(list,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
|
||||||
paramanager.getintparaloc(list,pd,3,paraloc3);
|
paramanager.getcgtempparaloc(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);
|
||||||
|
@ -162,9 +162,9 @@ unit cgexcept;
|
|||||||
|
|
||||||
{ 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(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(list,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
|
||||||
paramanager.getintparaloc(list,pd,3,paraloc3);
|
paramanager.getcgtempparaloc(list,pd,3,paraloc3);
|
||||||
if pd.is_pushleftright then
|
if pd.is_pushleftright then
|
||||||
begin
|
begin
|
||||||
{ type of exceptionframe }
|
{ type of exceptionframe }
|
||||||
@ -197,7 +197,7 @@ unit cgexcept;
|
|||||||
|
|
||||||
{ 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(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,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);
|
||||||
@ -302,7 +302,7 @@ unit cgexcept;
|
|||||||
reference_reset_symbol(href2, current_asmdata.RefAsmSymbol(excepttype.vmt_mangledname, AT_DATA, indirect), 0, sizeof(pint), []);
|
reference_reset_symbol(href2, current_asmdata.RefAsmSymbol(excepttype.vmt_mangledname, AT_DATA, indirect), 0, sizeof(pint), []);
|
||||||
if otherunit then
|
if otherunit then
|
||||||
current_module.add_extern_asmsym(excepttype.vmt_mangledname, AB_EXTERNAL, AT_DATA);
|
current_module.add_extern_asmsym(excepttype.vmt_mangledname, AB_EXTERNAL, AT_DATA);
|
||||||
paramanager.getintparaloc(list, pd, 1, paraloc1);
|
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
|
||||||
hlcg.a_loadaddr_ref_cgpara(list, excepttype.vmt_def, href2, paraloc1);
|
hlcg.a_loadaddr_ref_cgpara(list, excepttype.vmt_def, href2, paraloc1);
|
||||||
paramanager.freecgpara(list, paraloc1);
|
paramanager.freecgpara(list, paraloc1);
|
||||||
fpc_catches_res:=hlcg.g_call_system_proc(list, pd, [@paraloc1], nil);
|
fpc_catches_res:=hlcg.g_call_system_proc(list, pd, [@paraloc1], nil);
|
||||||
|
@ -3296,7 +3296,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(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(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).resetiftemp;
|
g_call_system_proc(list,pd,[@cgpara1],nil).resetiftemp;
|
||||||
@ -3329,9 +3329,9 @@ implementation
|
|||||||
cgpara1.init;
|
cgpara1.init;
|
||||||
cgpara2.init;
|
cgpara2.init;
|
||||||
cgpara3.init;
|
cgpara3.init;
|
||||||
paramanager.getintparaloc(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
paramanager.getintparaloc(list,pd,2,cgpara2);
|
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
|
||||||
paramanager.getintparaloc(list,pd,3,cgpara3);
|
paramanager.getcgtempparaloc(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);
|
||||||
@ -3361,8 +3361,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(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
paramanager.getintparaloc(list,pd,2,cgpara2);
|
paramanager.getcgtempparaloc(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);
|
||||||
@ -3405,7 +3405,7 @@ implementation
|
|||||||
if incrfunc<>'' then
|
if incrfunc<>'' then
|
||||||
begin
|
begin
|
||||||
pd:=search_system_proc(incrfunc);
|
pd:=search_system_proc(incrfunc);
|
||||||
paramanager.getintparaloc(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
{ widestrings aren't ref. counted on all platforms so we need the address
|
{ 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
|
||||||
@ -3419,8 +3419,8 @@ implementation
|
|||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
pd:=search_system_proc('fpc_addref');
|
pd:=search_system_proc('fpc_addref');
|
||||||
paramanager.getintparaloc(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
paramanager.getintparaloc(list,pd,2,cgpara2);
|
paramanager.getcgtempparaloc(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,def_needs_indirect(t)),0,sizeof(pint),[]);
|
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
|
||||||
@ -3459,7 +3459,7 @@ implementation
|
|||||||
else if t.typ=variantdef then
|
else if t.typ=variantdef then
|
||||||
begin
|
begin
|
||||||
pd:=search_system_proc('fpc_variant_init');
|
pd:=search_system_proc('fpc_variant_init');
|
||||||
paramanager.getintparaloc(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
a_loadaddr_ref_cgpara(list,t,ref,cgpara1);
|
a_loadaddr_ref_cgpara(list,t,ref,cgpara1);
|
||||||
paramanager.freecgpara(list,cgpara1);
|
paramanager.freecgpara(list,cgpara1);
|
||||||
g_call_system_proc(list,pd,[@cgpara1],nil).resetiftemp;
|
g_call_system_proc(list,pd,[@cgpara1],nil).resetiftemp;
|
||||||
@ -3469,8 +3469,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(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
paramanager.getintparaloc(list,pd,2,cgpara2);
|
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
|
||||||
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
|
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
|
||||||
if pd.is_pushleftright then
|
if pd.is_pushleftright then
|
||||||
begin
|
begin
|
||||||
@ -3519,8 +3519,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(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
paramanager.getintparaloc(list,pd,2,cgpara2);
|
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
|
||||||
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
|
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
|
||||||
if pd.is_pushleftright then
|
if pd.is_pushleftright then
|
||||||
begin
|
begin
|
||||||
@ -3541,7 +3541,7 @@ implementation
|
|||||||
end;
|
end;
|
||||||
pd:=search_system_proc(decrfunc);
|
pd:=search_system_proc(decrfunc);
|
||||||
cgpara1.init;
|
cgpara1.init;
|
||||||
paramanager.getintparaloc(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(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).resetiftemp;
|
g_call_system_proc(list,pd,[@cgpara1],nil).resetiftemp;
|
||||||
@ -3559,9 +3559,9 @@ implementation
|
|||||||
cgpara2.init;
|
cgpara2.init;
|
||||||
cgpara3.init;
|
cgpara3.init;
|
||||||
pd:=search_system_proc(name);
|
pd:=search_system_proc(name);
|
||||||
paramanager.getintparaloc(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
paramanager.getintparaloc(list,pd,2,cgpara2);
|
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
|
||||||
paramanager.getintparaloc(list,pd,3,cgpara3);
|
paramanager.getcgtempparaloc(list,pd,3,cgpara3);
|
||||||
|
|
||||||
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
|
reference_reset_symbol(href,RTTIWriter.get_rtti_label(t,initrtti,def_needs_indirect(t)),0,sizeof(pint),[]);
|
||||||
{ if calling convention is left to right, push parameters 1 and 2 }
|
{ if calling convention is left to right, push parameters 1 and 2 }
|
||||||
@ -3857,7 +3857,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(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(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);
|
||||||
@ -3872,9 +3872,9 @@ implementation
|
|||||||
cgpara1.init;
|
cgpara1.init;
|
||||||
cgpara2.init;
|
cgpara2.init;
|
||||||
cgpara3.init;
|
cgpara3.init;
|
||||||
paramanager.getintparaloc(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
paramanager.getintparaloc(list,pd,2,cgpara2);
|
paramanager.getcgtempparaloc(list,pd,2,cgpara2);
|
||||||
paramanager.getintparaloc(list,pd,3,cgpara3);
|
paramanager.getcgtempparaloc(list,pd,3,cgpara3);
|
||||||
if pd.is_pushleftright then
|
if pd.is_pushleftright then
|
||||||
begin
|
begin
|
||||||
{ load source }
|
{ load source }
|
||||||
@ -3911,7 +3911,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(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
{ load source }
|
{ load source }
|
||||||
a_load_loc_cgpara(list,cpointerdef.getreusable(arrdef),l,cgpara1);
|
a_load_loc_cgpara(list,cpointerdef.getreusable(arrdef),l,cgpara1);
|
||||||
paramanager.freecgpara(list,cgpara1);
|
paramanager.freecgpara(list,cgpara1);
|
||||||
@ -5367,7 +5367,7 @@ implementation
|
|||||||
begin
|
begin
|
||||||
pd:=search_system_proc('fpc_stackcheck');
|
pd:=search_system_proc('fpc_stackcheck');
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
||||||
hlcg.a_load_const_cgpara(list,paraloc1.def,current_procinfo.calc_stackframe_size,paraloc1);
|
hlcg.a_load_const_cgpara(list,paraloc1.def,current_procinfo.calc_stackframe_size,paraloc1);
|
||||||
paramanager.freecgpara(list,paraloc1);
|
paramanager.freecgpara(list,paraloc1);
|
||||||
paraloc1.done;
|
paraloc1.done;
|
||||||
@ -5382,7 +5382,7 @@ implementation
|
|||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
{ The parameter to fpc_stackcheck is loaded seperately via
|
{ The parameter to fpc_stackcheck is loaded seperately via
|
||||||
gen_stack_check_size_para() }
|
gen_stack_check_size_para() }
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.freecgpara(list,paraloc1);
|
paramanager.freecgpara(list,paraloc1);
|
||||||
{ Call the helper }
|
{ Call the helper }
|
||||||
g_call_system_proc(list,pd,[@paraloc1],nil).resetiftemp;
|
g_call_system_proc(list,pd,[@paraloc1],nil).resetiftemp;
|
||||||
|
@ -53,7 +53,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(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
||||||
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
|
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
|
||||||
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
||||||
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;
|
||||||
@ -256,7 +256,7 @@ unit cpupara;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
||||||
var
|
var
|
||||||
paraloc : pcgparalocation;
|
paraloc : pcgparalocation;
|
||||||
psym: tparavarsym;
|
psym: tparavarsym;
|
||||||
|
@ -136,7 +136,7 @@ implementation
|
|||||||
if pvd.typ<>procvardef then
|
if pvd.typ<>procvardef then
|
||||||
internalerror(2012120901);
|
internalerror(2012120901);
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1);
|
||||||
hregister:=hlcg.getaddressregister(current_asmdata.CurrAsmList,pvd);
|
hregister:=hlcg.getaddressregister(current_asmdata.CurrAsmList,pvd);
|
||||||
segreg:=cg.getintregister(current_asmdata.CurrAsmList,OS_16);
|
segreg:=cg.getintregister(current_asmdata.CurrAsmList,OS_16);
|
||||||
reference_reset_symbol(segref,current_asmdata.RefAsmSymbol('FPC_THREADVAR_RELOCATE',AT_DATA),0,pvd.alignment,[]);
|
reference_reset_symbol(segref,current_asmdata.RefAsmSymbol('FPC_THREADVAR_RELOCATE',AT_DATA),0,pvd.alignment,[]);
|
||||||
|
@ -168,7 +168,7 @@ implementation
|
|||||||
internalerror(2012010601);
|
internalerror(2012010601);
|
||||||
pd:=tprocdef(tprocsym(sym).ProcdefList[0]);
|
pd:=tprocdef(tprocsym(sym).ProcdefList[0]);
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
||||||
hlcg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,resultdef,location.reference,paraloc1);
|
hlcg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,resultdef,location.reference,paraloc1);
|
||||||
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
|
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
|
||||||
paraloc1.done;
|
paraloc1.done;
|
||||||
|
@ -44,7 +44,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(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
||||||
function create_paraloc_info(p : TAbstractProcDef; side: tcallercallee):longint;override;
|
function create_paraloc_info(p : TAbstractProcDef; side: tcallercallee):longint;override;
|
||||||
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
||||||
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
||||||
@ -65,7 +65,7 @@ implementation
|
|||||||
hlcgobj;
|
hlcgobj;
|
||||||
|
|
||||||
|
|
||||||
procedure tcpuparamanager.GetIntParaLoc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
||||||
begin
|
begin
|
||||||
{ not yet implemented/used }
|
{ not yet implemented/used }
|
||||||
internalerror(2010121001);
|
internalerror(2010121001);
|
||||||
|
@ -1175,19 +1175,19 @@ implementation
|
|||||||
sizepara.init;
|
sizepara.init;
|
||||||
alignpara.init;
|
alignpara.init;
|
||||||
volatilepara.init;
|
volatilepara.init;
|
||||||
paramanager.getintparaloc(list,pd,1,destpara);
|
paramanager.getcgtempparaloc(list,pd,1,destpara);
|
||||||
paramanager.getintparaloc(list,pd,2,sourcepara);
|
paramanager.getcgtempparaloc(list,pd,2,sourcepara);
|
||||||
paramanager.getintparaloc(list,pd,3,sizepara);
|
paramanager.getcgtempparaloc(list,pd,3,sizepara);
|
||||||
if indivalign then
|
if indivalign then
|
||||||
begin
|
begin
|
||||||
paramanager.getintparaloc(list,pd,4,volatilepara);
|
paramanager.getcgtempparaloc(list,pd,4,volatilepara);
|
||||||
destpara.Alignment:=-dest.alignment;
|
destpara.Alignment:=-dest.alignment;
|
||||||
sourcepara.Alignment:=-source.alignment;
|
sourcepara.Alignment:=-source.alignment;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
paramanager.getintparaloc(list,pd,4,alignpara);
|
paramanager.getcgtempparaloc(list,pd,4,alignpara);
|
||||||
paramanager.getintparaloc(list,pd,5,volatilepara);
|
paramanager.getcgtempparaloc(list,pd,5,volatilepara);
|
||||||
maxalign:=newalignment(max(source.alignment,dest.alignment),min(source.alignment,dest.alignment));
|
maxalign:=newalignment(max(source.alignment,dest.alignment),min(source.alignment,dest.alignment));
|
||||||
a_load_const_cgpara(list,u32inttype,maxalign,alignpara);
|
a_load_const_cgpara(list,u32inttype,maxalign,alignpara);
|
||||||
end;
|
end;
|
||||||
|
@ -45,7 +45,7 @@ unit llvmpara;
|
|||||||
architecture-specific code, or whether we will have to integrate parts
|
architecture-specific code, or whether we will have to integrate parts
|
||||||
into the various tcpuparamanager classes }
|
into the various tcpuparamanager classes }
|
||||||
tllvmparamanager = class(tcpuparamanager)
|
tllvmparamanager = class(tcpuparamanager)
|
||||||
procedure getintparaloc(list: TAsmList; pd: tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
|
procedure getcgtempparaloc(list: TAsmList; pd: tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
|
||||||
function param_use_paraloc(const cgpara: tcgpara): boolean; override;
|
function param_use_paraloc(const cgpara: tcgpara): boolean; override;
|
||||||
procedure createtempparaloc(list: TAsmList; calloption: tproccalloption; parasym: tparavarsym; can_use_final_stack_loc: boolean; var cgpara: TCGPara); override;
|
procedure createtempparaloc(list: TAsmList; calloption: tproccalloption; parasym: tparavarsym; can_use_final_stack_loc: boolean; var cgpara: TCGPara); override;
|
||||||
function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint; override;
|
function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint; override;
|
||||||
@ -71,7 +71,7 @@ unit llvmpara;
|
|||||||
|
|
||||||
{ tllvmparamanager }
|
{ tllvmparamanager }
|
||||||
|
|
||||||
procedure tllvmparamanager.getintparaloc(list: TAsmList; pd: tabstractprocdef; nr: longint; var cgpara: tcgpara);
|
procedure tllvmparamanager.getcgtempparaloc(list: TAsmList; pd: tabstractprocdef; nr: longint; var cgpara: tcgpara);
|
||||||
begin
|
begin
|
||||||
if (nr<1) or (nr>pd.paras.count) then
|
if (nr<1) or (nr>pd.paras.count) then
|
||||||
InternalError(2015040401);
|
InternalError(2015040401);
|
||||||
|
@ -321,7 +321,7 @@ implementation
|
|||||||
landingpadtypeiddef:=tfieldvarsym(trecorddef(landingpadstructdef).symtable.symlist[1]).vardef;
|
landingpadtypeiddef:=tfieldvarsym(trecorddef(landingpadstructdef).symtable.symlist[1]).vardef;
|
||||||
exceptiontypeidreg:=hlcg.getaddressregister(list,landingpadtypeiddef);
|
exceptiontypeidreg:=hlcg.getaddressregister(list,landingpadtypeiddef);
|
||||||
pd:=search_system_proc('llvm_eh_typeid_for');
|
pd:=search_system_proc('llvm_eh_typeid_for');
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
reference_reset_symbol(rttiref,rttisym,0,rttidef.alignment,[]);
|
reference_reset_symbol(rttiref,rttisym,0,rttidef.alignment,[]);
|
||||||
rttiref.refaddr:=addr_full;
|
rttiref.refaddr:=addr_full;
|
||||||
hlcg.a_load_ref_cgpara(list,cpointerdef.getreusable(rttidef),rttiref,paraloc1);
|
hlcg.a_load_ref_cgpara(list,cpointerdef.getreusable(rttidef),rttiref,paraloc1);
|
||||||
@ -341,7 +341,7 @@ implementation
|
|||||||
list.concat(taillvm.extract(la_extractvalue,wrappedexception,landingpadstructdef,landingpadres,0));
|
list.concat(taillvm.extract(la_extractvalue,wrappedexception,landingpadstructdef,landingpadres,0));
|
||||||
|
|
||||||
pd:=search_system_proc('fpc_psabi_begin_catch');
|
pd:=search_system_proc('fpc_psabi_begin_catch');
|
||||||
paramanager.getintparaloc(list, pd, 1, paraloc1);
|
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
|
||||||
hlcg.a_load_reg_cgpara(list,voidpointertype,wrappedexception,paraloc1);
|
hlcg.a_load_reg_cgpara(list,voidpointertype,wrappedexception,paraloc1);
|
||||||
begincatchres:=hlcg.g_call_system_proc(list,pd,[@paraloc1],nil);
|
begincatchres:=hlcg.g_call_system_proc(list,pd,[@paraloc1],nil);
|
||||||
location_reset(exceptloc, LOC_REGISTER, def_cgsize(begincatchres.def));
|
location_reset(exceptloc, LOC_REGISTER, def_cgsize(begincatchres.def));
|
||||||
|
@ -159,8 +159,8 @@ implementation
|
|||||||
sizepara.init;
|
sizepara.init;
|
||||||
ptrpara.init;
|
ptrpara.init;
|
||||||
pd:=search_system_proc(procname);
|
pd:=search_system_proc(procname);
|
||||||
paramanager.getintparaloc(list,pd,1,sizepara);
|
paramanager.getcgtempparaloc(list,pd,1,sizepara);
|
||||||
paramanager.getintparaloc(list,pd,2,ptrpara);
|
paramanager.getcgtempparaloc(list,pd,2,ptrpara);
|
||||||
hlcg.a_load_const_cgpara(list,sizepara.def,temp^.size,sizepara);
|
hlcg.a_load_const_cgpara(list,sizepara.def,temp^.size,sizepara);
|
||||||
hlcg.a_loadaddr_ref_cgpara(list,temp^.def,ref,ptrpara);
|
hlcg.a_loadaddr_ref_cgpara(list,temp^.def,ref,ptrpara);
|
||||||
hlcg.g_call_system_proc(list,pd,[@sizepara,@ptrpara],nil).resetiftemp;
|
hlcg.g_call_system_proc(list,pd,[@sizepara,@ptrpara],nil).resetiftemp;
|
||||||
|
@ -576,8 +576,8 @@ unit cgcpu;
|
|||||||
pd:=search_system_proc(name);
|
pd:=search_system_proc(name);
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(list,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
|
||||||
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);
|
||||||
paramanager.freecgpara(list,paraloc2);
|
paramanager.freecgpara(list,paraloc2);
|
||||||
@ -600,8 +600,8 @@ unit cgcpu;
|
|||||||
pd:=search_system_proc(name);
|
pd:=search_system_proc(name);
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(list,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
|
||||||
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);
|
||||||
paramanager.freecgpara(list,paraloc2);
|
paramanager.freecgpara(list,paraloc2);
|
||||||
|
@ -1489,9 +1489,9 @@ begin
|
|||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paraloc3.init;
|
paraloc3.init;
|
||||||
paramanager.getintparaloc(list, pd, 1, paraloc1);
|
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
|
||||||
paramanager.getintparaloc(list, pd, 2, paraloc2);
|
paramanager.getcgtempparaloc(list, pd, 2, paraloc2);
|
||||||
paramanager.getintparaloc(list, pd, 3, paraloc3);
|
paramanager.getcgtempparaloc(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);
|
||||||
|
@ -1267,7 +1267,7 @@ implementation
|
|||||||
pd:=search_system_proc('fpc_safecallcheck');
|
pd:=search_system_proc('fpc_safecallcheck');
|
||||||
cgpara.init;
|
cgpara.init;
|
||||||
{ fpc_safecallcheck returns its parameter value (= function result of function we just called) }
|
{ fpc_safecallcheck returns its parameter value (= function result of function we just called) }
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,cgpara);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,cgpara);
|
||||||
location_reset(tmploc,LOC_REGISTER,def_cgsize(retloc.Def));
|
location_reset(tmploc,LOC_REGISTER,def_cgsize(retloc.Def));
|
||||||
tmploc.register:=hlcg.getregisterfordef(current_asmdata.CurrAsmList,retloc.Def);
|
tmploc.register:=hlcg.getregisterfordef(current_asmdata.CurrAsmList,retloc.Def);
|
||||||
hlcg.gen_load_cgpara_loc(current_asmdata.CurrAsmList,retloc.Def,retloc,tmploc,true);
|
hlcg.gen_load_cgpara_loc(current_asmdata.CurrAsmList,retloc.Def,retloc,tmploc,true);
|
||||||
|
@ -888,7 +888,7 @@ implementation
|
|||||||
nil otherwise. }
|
nil otherwise. }
|
||||||
pd:=search_system_proc('fpc_safecallhandler');
|
pd:=search_system_proc('fpc_safecallhandler');
|
||||||
cgpara.init;
|
cgpara.init;
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,cgpara);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,cgpara);
|
||||||
if is_class(current_procinfo.procdef.struct) then
|
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'));
|
||||||
|
@ -336,7 +336,7 @@ implementation
|
|||||||
reference_reset_base(tvref,hreg_tv_rec,0,ctempposinvalid,tvref.alignment,tvref.volatility)
|
reference_reset_base(tvref,hreg_tv_rec,0,ctempposinvalid,tvref.alignment,tvref.volatility)
|
||||||
end;
|
end;
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,tprocvardef(pvd),1,paraloc1);
|
||||||
hregister:=hlcg.getaddressregister(current_asmdata.CurrAsmList,pvd);
|
hregister:=hlcg.getaddressregister(current_asmdata.CurrAsmList,pvd);
|
||||||
reference_reset_symbol(href,current_asmdata.RefAsmSymbol('FPC_THREADVAR_RELOCATE',AT_DATA,indirect),0,pvd.alignment,[]);
|
reference_reset_symbol(href,current_asmdata.RefAsmSymbol('FPC_THREADVAR_RELOCATE',AT_DATA,indirect),0,pvd.alignment,[]);
|
||||||
if not issystemunit then
|
if not issystemunit then
|
||||||
|
@ -455,7 +455,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(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
||||||
cg.a_load_const_cgpara(current_asmdata.CurrAsmList,OS_S32,aint(200),paraloc1);
|
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);
|
||||||
|
@ -306,7 +306,7 @@ implementation
|
|||||||
internalerror(2012010601);
|
internalerror(2012010601);
|
||||||
pd:=tprocdef(tprocsym(sym).ProcdefList[0]);
|
pd:=tprocdef(tprocsym(sym).ProcdefList[0]);
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
||||||
hlcg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference,paraloc1);
|
hlcg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference,paraloc1);
|
||||||
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
|
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
|
||||||
paraloc1.done;
|
paraloc1.done;
|
||||||
@ -399,7 +399,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(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
||||||
hlcg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference,paraloc1);
|
hlcg.a_loadaddr_ref_cgpara(current_asmdata.CurrAsmList,left.resultdef,location.reference,paraloc1);
|
||||||
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
|
paramanager.freecgpara(current_asmdata.CurrAsmList,paraloc1);
|
||||||
hlcg.allocallcpuregisters(current_asmdata.CurrAsmList);
|
hlcg.allocallcpuregisters(current_asmdata.CurrAsmList);
|
||||||
@ -768,8 +768,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(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
|
||||||
if pd.is_pushleftright then
|
if pd.is_pushleftright then
|
||||||
begin
|
begin
|
||||||
hlcg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.resultdef,left.location,paraloc1);
|
hlcg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.resultdef,left.location,paraloc1);
|
||||||
@ -808,8 +808,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(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,2,paraloc2);
|
||||||
if pd.is_pushleftright then
|
if pd.is_pushleftright then
|
||||||
begin
|
begin
|
||||||
hlcg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.resultdef,left.location,paraloc1);
|
hlcg.a_load_loc_cgpara(current_asmdata.CurrAsmList,left.resultdef,left.location,paraloc1);
|
||||||
|
@ -94,7 +94,9 @@ unit paramgr;
|
|||||||
function get_saved_registers_fpu(calloption : tproccalloption):tcpuregisterarray;virtual;
|
function get_saved_registers_fpu(calloption : tproccalloption):tcpuregisterarray;virtual;
|
||||||
function get_saved_registers_mm(calloption : tproccalloption):tcpuregisterarray;virtual;
|
function get_saved_registers_mm(calloption : tproccalloption):tcpuregisterarray;virtual;
|
||||||
|
|
||||||
procedure getintparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);virtual;
|
{ \brief Get a parameter location for calling a procdef directly instead of via a call node }
|
||||||
|
{ \returns parameter location in \c cgpara for parameter \c nr of \c pd }
|
||||||
|
procedure getcgtempparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);virtual;
|
||||||
|
|
||||||
{# allocate an individual pcgparalocation that's part of a tcgpara
|
{# allocate an individual pcgparalocation that's part of a tcgpara
|
||||||
|
|
||||||
@ -746,7 +748,7 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tparamanager.getintparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);
|
procedure tparamanager.getcgtempparaloc(list: TAsmList; pd: tabstractprocdef; nr : longint; var cgpara: tcgpara);
|
||||||
begin
|
begin
|
||||||
if (nr<1) or (nr>pd.paras.count) then
|
if (nr<1) or (nr>pd.paras.count) then
|
||||||
InternalError(2013060101);
|
InternalError(2013060101);
|
||||||
|
@ -38,7 +38,7 @@ unit cpupara;
|
|||||||
function get_saved_registers_int(calloption : tproccalloption):tcpuregisterarray;override;
|
function get_saved_registers_int(calloption : tproccalloption):tcpuregisterarray;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(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
||||||
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
|
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
|
||||||
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
||||||
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
||||||
@ -91,7 +91,7 @@ unit cpupara;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
||||||
var
|
var
|
||||||
paraloc : pcgparalocation;
|
paraloc : pcgparalocation;
|
||||||
psym : tparavarsym;
|
psym : tparavarsym;
|
||||||
|
@ -43,7 +43,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(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
|
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
|
||||||
function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint; override;
|
function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint; override;
|
||||||
function create_varargs_paraloc_info(p: tabstractprocdef; side: tcallercallee; varargspara: tvarargsparalist): longint; override;
|
function create_varargs_paraloc_info(p: tabstractprocdef; side: tcallercallee; varargspara: tvarargsparalist): longint; override;
|
||||||
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
||||||
@ -92,7 +92,7 @@ begin
|
|||||||
result:=saved_regs;
|
result:=saved_regs;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
|
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
|
||||||
var
|
var
|
||||||
paraloc: pcgparalocation;
|
paraloc: pcgparalocation;
|
||||||
psym: tparavarsym;
|
psym: tparavarsym;
|
||||||
|
@ -712,7 +712,7 @@ unit cgppc;
|
|||||||
begin
|
begin
|
||||||
pd:=search_system_proc('mcount');
|
pd:=search_system_proc('mcount');
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(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;
|
||||||
|
@ -642,7 +642,7 @@ implementation
|
|||||||
|
|
||||||
pd:=search_system_proc('_unwind_resume');
|
pd:=search_system_proc('_unwind_resume');
|
||||||
cgpara1.init;
|
cgpara1.init;
|
||||||
paramanager.getintparaloc(list,pd,1,cgpara1);
|
paramanager.getcgtempparaloc(list,pd,1,cgpara1);
|
||||||
hlcg.a_load_reg_cgpara(list,voidpointertype,t.unwind_info,cgpara1);
|
hlcg.a_load_reg_cgpara(list,voidpointertype,t.unwind_info,cgpara1);
|
||||||
paramanager.freecgpara(list,cgpara1);
|
paramanager.freecgpara(list,cgpara1);
|
||||||
hlcg.g_call_system_proc(list,'_unwind_resume',[@cgpara1],nil).resetiftemp;
|
hlcg.g_call_system_proc(list,'_unwind_resume',[@cgpara1],nil).resetiftemp;
|
||||||
@ -741,7 +741,7 @@ implementation
|
|||||||
(current_procinfo as tpsabiehprocinfo).CurrentAction.AddAction(tobjectdef(-1));
|
(current_procinfo as tpsabiehprocinfo).CurrentAction.AddAction(tobjectdef(-1));
|
||||||
|
|
||||||
pd:=search_system_proc('fpc_psabi_begin_catch');
|
pd:=search_system_proc('fpc_psabi_begin_catch');
|
||||||
paramanager.getintparaloc(list, pd, 1, paraloc1);
|
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
|
||||||
hlcg.a_load_reg_cgpara(list,voidpointertype,wrappedexception,paraloc1);
|
hlcg.a_load_reg_cgpara(list,voidpointertype,wrappedexception,paraloc1);
|
||||||
begincatchres:=hlcg.g_call_system_proc(list,pd,[@paraloc1],nil);
|
begincatchres:=hlcg.g_call_system_proc(list,pd,[@paraloc1],nil);
|
||||||
location_reset(exceptloc, LOC_REGISTER, def_cgsize(begincatchres.def));
|
location_reset(exceptloc, LOC_REGISTER, def_cgsize(begincatchres.def));
|
||||||
|
@ -315,9 +315,9 @@ unit cgcpu;
|
|||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paraloc3.init;
|
paraloc3.init;
|
||||||
paramanager.getintparaloc(list, pd, 1, paraloc1);
|
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
|
||||||
paramanager.getintparaloc(list, pd, 2, paraloc2);
|
paramanager.getcgtempparaloc(list, pd, 2, paraloc2);
|
||||||
paramanager.getintparaloc(list, pd, 3, paraloc3);
|
paramanager.getcgtempparaloc(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);
|
||||||
|
@ -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(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);override;
|
||||||
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
|
function create_paraloc_info(p : tabstractprocdef; side: tcallercallee):longint;override;
|
||||||
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
function create_varargs_paraloc_info(p : tabstractprocdef; side: tcallercallee; varargspara:tvarargsparalist):longint;override;
|
||||||
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
||||||
@ -68,7 +68,7 @@ unit cpupara;
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr : longint; var cgpara : tcgpara);
|
||||||
var
|
var
|
||||||
paraloc : pcgparalocation;
|
paraloc : pcgparalocation;
|
||||||
psym : tparavarsym;
|
psym : tparavarsym;
|
||||||
|
@ -524,9 +524,9 @@ implementation
|
|||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paraloc3.init;
|
paraloc3.init;
|
||||||
paramanager.getintparaloc(list, pd, 1, paraloc1);
|
paramanager.getcgtempparaloc(list, pd, 1, paraloc1);
|
||||||
paramanager.getintparaloc(list, pd, 2, paraloc2);
|
paramanager.getcgtempparaloc(list, pd, 2, paraloc2);
|
||||||
paramanager.getintparaloc(list, pd, 3, paraloc3);
|
paramanager.getcgtempparaloc(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);
|
||||||
|
@ -38,7 +38,7 @@ unit cpupara;
|
|||||||
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(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
|
procedure getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara); override;
|
||||||
function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint; override;
|
function create_paraloc_info(p: tabstractprocdef; side: tcallercallee): longint; override;
|
||||||
function create_varargs_paraloc_info(p: tabstractprocdef; side: tcallercallee; varargspara: tvarargsparalist): longint; override;
|
function create_varargs_paraloc_info(p: tabstractprocdef; side: tcallercallee; varargspara: tvarargsparalist): longint; override;
|
||||||
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
function get_funcretloc(p : tabstractprocdef; side: tcallercallee; forcetempdef: tdef): tcgpara;override;
|
||||||
@ -68,7 +68,7 @@ implementation
|
|||||||
result:=[RS_F0..RS_F31]-[RS_F8..RS_F9,RS_F18..RS_F27];
|
result:=[RS_F0..RS_F31]-[RS_F8..RS_F9,RS_F18..RS_F27];
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure tcpuparamanager.getintparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
|
procedure tcpuparamanager.getcgtempparaloc(list: TAsmList; pd : tabstractprocdef; nr: longint; var cgpara: tcgpara);
|
||||||
var
|
var
|
||||||
paraloc: pcgparalocation;
|
paraloc: pcgparalocation;
|
||||||
psym: tparavarsym;
|
psym: tparavarsym;
|
||||||
|
@ -1113,9 +1113,9 @@ implementation
|
|||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
paraloc2.init;
|
paraloc2.init;
|
||||||
paraloc3.init;
|
paraloc3.init;
|
||||||
paramanager.getintparaloc(list,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(list,pd,1,paraloc1);
|
||||||
paramanager.getintparaloc(list,pd,2,paraloc2);
|
paramanager.getcgtempparaloc(list,pd,2,paraloc2);
|
||||||
paramanager.getintparaloc(list,pd,3,paraloc3);
|
paramanager.getcgtempparaloc(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);
|
||||||
|
@ -65,7 +65,7 @@ implementation
|
|||||||
begin
|
begin
|
||||||
paraloc1.init;
|
paraloc1.init;
|
||||||
pd:=search_system_proc('fpc_tls_add');
|
pd:=search_system_proc('fpc_tls_add');
|
||||||
paramanager.getintparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
paramanager.getcgtempparaloc(current_asmdata.CurrAsmList,pd,1,paraloc1);
|
||||||
if not(vo_is_weak_external in gvs.varoptions) then
|
if not(vo_is_weak_external in gvs.varoptions) then
|
||||||
reference_reset_symbol(href,current_asmdata.RefAsmSymbol(gvs.mangledname,AT_DATA,use_indirect_symbol(gvs)),0,sizeof(pint),[])
|
reference_reset_symbol(href,current_asmdata.RefAsmSymbol(gvs.mangledname,AT_DATA,use_indirect_symbol(gvs)),0,sizeof(pint),[])
|
||||||
else
|
else
|
||||||
|
@ -448,8 +448,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(list,pd,1,para1);
|
paramanager.getcgtempparaloc(list,pd,1,para1);
|
||||||
paramanager.getintparaloc(list,pd,2,para2);
|
paramanager.getcgtempparaloc(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) }
|
||||||
|
Loading…
Reference in New Issue
Block a user