mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-03 11:37:14 +01:00
+ llvm implementation of g_set_addr_nonbitpacked_record_field_ref
git-svn-id: trunk@31642 -
This commit is contained in:
parent
9ee2a0f71c
commit
4da34a6046
@ -97,6 +97,8 @@ uses
|
|||||||
procedure g_ptrtypecast_reg(list: TAsmList; fromdef, todef: tpointerdef; reg: tregister); override;
|
procedure g_ptrtypecast_reg(list: TAsmList; fromdef, todef: tpointerdef; reg: tregister); override;
|
||||||
procedure g_ptrtypecast_ref(list: TAsmList; fromdef, todef: tpointerdef; var ref: treference); override;
|
procedure g_ptrtypecast_ref(list: TAsmList; fromdef, todef: tpointerdef; var ref: treference); override;
|
||||||
|
|
||||||
|
procedure g_set_addr_nonbitpacked_record_field_ref(list: TAsmList; recdef: trecorddef; field: tfieldvarsym; var recref: treference); override;
|
||||||
|
|
||||||
procedure a_loadmm_ref_reg(list: TAsmList; fromsize, tosize: tdef; const ref: treference; reg: tregister; shuffle: pmmshuffle); override;
|
procedure a_loadmm_ref_reg(list: TAsmList; fromsize, tosize: tdef; const ref: treference; reg: tregister; shuffle: pmmshuffle); override;
|
||||||
procedure a_loadmm_reg_ref(list: TAsmList; fromsize, tosize: tdef; reg: tregister; const ref: treference; shuffle: pmmshuffle); override;
|
procedure a_loadmm_reg_ref(list: TAsmList; fromsize, tosize: tdef; reg: tregister; const ref: treference; shuffle: pmmshuffle); override;
|
||||||
procedure a_loadmm_reg_reg(list: TAsmList; fromsize, tosize: tdef; reg1, reg2: tregister; shuffle: pmmshuffle); override;
|
procedure a_loadmm_reg_reg(list: TAsmList; fromsize, tosize: tdef; reg1, reg2: tregister; shuffle: pmmshuffle); override;
|
||||||
@ -1217,6 +1219,25 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure thlcgllvm.g_set_addr_nonbitpacked_record_field_ref(list: TAsmList; recdef: trecorddef; field: tfieldvarsym; var recref: treference);
|
||||||
|
var
|
||||||
|
llvmfielddef,
|
||||||
|
llvmfieldptrdef,
|
||||||
|
subscriptdef: tdef;
|
||||||
|
newbase: tregister;
|
||||||
|
begin
|
||||||
|
{ get the type of the corresponding field in the llvm shadow
|
||||||
|
definition }
|
||||||
|
llvmfielddef:=tabstractrecordsymtable(recdef.symtable).llvmst[field].def;
|
||||||
|
subscriptdef:=cpointerdef.getreusable(recdef);
|
||||||
|
{ load the address of that shadow field }
|
||||||
|
newbase:=hlcg.getaddressregister(list,cpointerdef.getreusable(llvmfielddef));
|
||||||
|
recref:=thlcgllvm(hlcg).make_simple_ref(current_asmdata.CurrAsmList,recref,recdef);
|
||||||
|
list.concat(taillvm.getelementptr_reg_size_ref_size_const(newbase,subscriptdef,recref,s32inttype,field.llvmfieldnr,true));
|
||||||
|
reference_reset_base(recref,cpointerdef.getreusable(field.vardef),newbase,field.offsetfromllvmfield,newalignment(recref.alignment,field.fieldoffset+field.offsetfromllvmfield));
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure thlcgllvm.a_loadmm_ref_reg(list: TAsmList; fromsize, tosize: tdef; const ref: treference; reg: tregister; shuffle: pmmshuffle);
|
procedure thlcgllvm.a_loadmm_ref_reg(list: TAsmList; fromsize, tosize: tdef; const ref: treference; reg: tregister; shuffle: pmmshuffle);
|
||||||
var
|
var
|
||||||
href: treference;
|
href: treference;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user