mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 12:29:18 +02:00
+ support for a_call_reg() on the llvm target (can call simple procvars now)
git-svn-id: branches/hlcgllvm@28480 -
This commit is contained in:
parent
3a78f4f580
commit
9d118567cd
@ -101,8 +101,10 @@ interface
|
|||||||
constructor getelementptr_reg_size_ref_size_const(dst:tregister;ptrsize:tdef;const ref:treference;indextype:tdef;index1:ptrint;indirect:boolean);
|
constructor getelementptr_reg_size_ref_size_const(dst:tregister;ptrsize:tdef;const ref:treference;indextype:tdef;index1:ptrint;indirect:boolean);
|
||||||
constructor getelementptr_reg_tai_size_const(dst:tregister;const ai:tai;indextype:tdef;index1:ptrint;indirect:boolean);
|
constructor getelementptr_reg_tai_size_const(dst:tregister;const ai:tai;indextype:tdef;index1:ptrint;indirect:boolean);
|
||||||
|
|
||||||
{ e.g. dst = call retsize (paras) }
|
{ e.g. dst = call retsize name (paras) }
|
||||||
constructor call_size_name_paras(dst: tregister;retsize: tdef;name:tasmsymbol;paras: tfplist);
|
constructor call_size_name_paras(dst: tregister;retsize: tdef;name:tasmsymbol;paras: tfplist);
|
||||||
|
{ e.g. dst = call retsize reg (paras) }
|
||||||
|
constructor call_size_reg_paras(dst: tregister;retsize: tdef;reg:tregister;paras: tfplist);
|
||||||
|
|
||||||
procedure loadtai(opidx: longint; _ai: tai);
|
procedure loadtai(opidx: longint; _ai: tai);
|
||||||
procedure loaddef(opidx: longint; _def: tdef);
|
procedure loaddef(opidx: longint; _def: tdef);
|
||||||
@ -853,4 +855,15 @@ uses
|
|||||||
loadparas(3,paras);
|
loadparas(3,paras);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
constructor taillvm.call_size_reg_paras(dst: tregister; retsize: tdef; reg: tregister; paras: tfplist);
|
||||||
|
begin
|
||||||
|
create_llvm(la_call);
|
||||||
|
ops:=4;
|
||||||
|
loadreg(0,dst);
|
||||||
|
loaddef(1,retsize);
|
||||||
|
loadreg(2,reg);
|
||||||
|
loadparas(3,paras);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
@ -429,10 +429,17 @@ implementation
|
|||||||
|
|
||||||
|
|
||||||
function thlcgllvm.a_call_reg(list: TAsmList; pd: tabstractprocdef; reg: tregister; const paras: array of pcgpara): tcgpara;
|
function thlcgllvm.a_call_reg(list: TAsmList; pd: tabstractprocdef; reg: tregister; const paras: array of pcgpara): tcgpara;
|
||||||
|
var
|
||||||
|
callparas: tfplist;
|
||||||
|
llvmretdef,
|
||||||
|
hlretdef,
|
||||||
|
calldef: tdef;
|
||||||
|
res: tregister;
|
||||||
begin
|
begin
|
||||||
internalerror(2012042824);
|
a_call_common(list,pd,paras,nil,res,calldef,hlretdef,llvmretdef,callparas);
|
||||||
|
list.concat(taillvm.call_size_reg_paras(res,calldef,reg,callparas));
|
||||||
result:=get_call_result_cgpara(pd,nil);
|
result:=get_call_result_cgpara(pd,nil);
|
||||||
// set_call_function_result(list,pd,pd.returndef,res,result);
|
set_call_function_result(list,pd,llvmretdef,hlretdef,res,result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user