mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-04 07:00:16 +02:00
* separate virtual method for loading the function result para (needed by
llvm) git-svn-id: branches/hlcgllvm@27011 -
This commit is contained in:
parent
b82053ef40
commit
f36848c243
@ -519,6 +519,7 @@ unit hlcgobj;
|
||||
location if it's not initialised by the Pascal code, e.g.
|
||||
stack-based architectures. By default it does nothing }
|
||||
procedure gen_load_uninitialized_function_result(list: TAsmList; pd: tprocdef; resdef: tdef; const resloc: tcgpara);virtual;
|
||||
procedure gen_load_loc_function_result(list: TAsmList; vardef: tdef; const l: tlocation);virtual;
|
||||
public
|
||||
{ load a tlocation into a cgpara }
|
||||
procedure gen_load_loc_cgpara(list: TAsmList; vardef: tdef; const l: tlocation; const cgpara: tcgpara);virtual;
|
||||
@ -4584,6 +4585,11 @@ implementation
|
||||
{ do nothing by default }
|
||||
end;
|
||||
|
||||
procedure thlcgobj.gen_load_loc_function_result(list: TAsmList; vardef: tdef; const l: tlocation);
|
||||
begin
|
||||
gen_load_loc_cgpara(list,vardef,l,current_procinfo.procdef.funcretloc[calleeside]);
|
||||
end;
|
||||
|
||||
procedure thlcgobj.gen_load_loc_cgpara(list: TAsmList; vardef: tdef; const l: tlocation; const cgpara: tcgpara);
|
||||
begin
|
||||
{ Handle Floating point types differently
|
||||
@ -4661,7 +4667,6 @@ implementation
|
||||
procedure thlcgobj.gen_load_return_value(list: TAsmList);
|
||||
var
|
||||
ressym : tabstractnormalvarsym;
|
||||
funcretloc : TCGPara;
|
||||
retdef : tdef;
|
||||
begin
|
||||
{ Is the loading needed? }
|
||||
@ -4674,8 +4679,6 @@ implementation
|
||||
) then
|
||||
exit;
|
||||
|
||||
funcretloc:=current_procinfo.procdef.funcretloc[calleeside];
|
||||
|
||||
{ constructors return self }
|
||||
if (current_procinfo.procdef.proctypeoption=potype_constructor) then
|
||||
begin
|
||||
@ -4695,10 +4698,10 @@ implementation
|
||||
begin
|
||||
{ was: don't do anything if funcretloc.loc in [LOC_INVALID,LOC_REFERENCE] }
|
||||
if not paramanager.ret_in_param(current_procinfo.procdef.returndef,current_procinfo.procdef) then
|
||||
gen_load_loc_cgpara(list,retdef,ressym.localloc,funcretloc);
|
||||
gen_load_loc_function_result(list,retdef,ressym.localloc);
|
||||
end
|
||||
else
|
||||
gen_load_uninitialized_function_result(list,current_procinfo.procdef,retdef,funcretloc)
|
||||
gen_load_uninitialized_function_result(list,current_procinfo.procdef,retdef,current_procinfo.procdef.funcretloc[calleeside])
|
||||
end;
|
||||
|
||||
procedure thlcgobj.record_generated_code_for_procdef(pd: tprocdef; code, data: TAsmList);
|
||||
|
Loading…
Reference in New Issue
Block a user