+ 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:
Jonas Maebe 2014-08-19 20:22:21 +00:00
parent 3a78f4f580
commit 9d118567cd
2 changed files with 23 additions and 3 deletions

View File

@ -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_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);
{ 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 loaddef(opidx: longint; _def: tdef);
@ -853,4 +855,15 @@ uses
loadparas(3,paras);
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.

View File

@ -429,10 +429,17 @@ implementation
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
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);
// set_call_function_result(list,pd,pd.returndef,res,result);
set_call_function_result(list,pd,llvmretdef,hlretdef,res,result);
end;