mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 16:59:11 +02:00
+ thlcg.g_ptrtypecast_reg/ref() to typecast a pointer in a register, or the
pointer type describing a reference, to another pointer type git-svn-id: branches/hlcgllvm@28781 -
This commit is contained in:
parent
f6e486a8b5
commit
cc596225fa
@ -531,6 +531,14 @@ unit hlcgobj;
|
|||||||
for targets without pointers. }
|
for targets without pointers. }
|
||||||
procedure g_reference_loc(list: TAsmList; def: tdef; const fromloc: tlocation; out toloc: tlocation); virtual;
|
procedure g_reference_loc(list: TAsmList; def: tdef; const fromloc: tlocation; out toloc: tlocation); virtual;
|
||||||
|
|
||||||
|
{ typecasts the pointer in reg to a new pointer. By default it does
|
||||||
|
nothing, only required for type-aware platforms like LLVM }
|
||||||
|
procedure g_ptrtypecast_reg(list: TAsmList; fromdef, todef: tpointerdef; reg: tregister); virtual;
|
||||||
|
{ same but for a treference (considers the reference itself, not the
|
||||||
|
value stored at that place in memory). Replaces ref with a new
|
||||||
|
reference if necessary }
|
||||||
|
procedure g_ptrtypecast_ref(list: TAsmList; fromdef, todef: tpointerdef; var ref: treference); virtual;
|
||||||
|
|
||||||
|
|
||||||
{ routines migrated from ncgutil }
|
{ routines migrated from ncgutil }
|
||||||
|
|
||||||
@ -3790,6 +3798,16 @@ implementation
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure thlcgobj.g_ptrtypecast_reg(list: TAsmList; fromdef, todef: tpointerdef; reg: tregister);
|
||||||
|
begin
|
||||||
|
{ nothing to do }
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure thlcgobj.g_ptrtypecast_ref(list: TAsmList; fromdef, todef: tpointerdef; var ref: treference);
|
||||||
|
begin
|
||||||
|
{ nothing to do }
|
||||||
|
end;
|
||||||
|
|
||||||
procedure thlcgobj.location_force_reg(list: TAsmList; var l: tlocation; src_size, dst_size: tdef; maybeconst: boolean);
|
procedure thlcgobj.location_force_reg(list: TAsmList; var l: tlocation; src_size, dst_size: tdef; maybeconst: boolean);
|
||||||
var
|
var
|
||||||
hregister,
|
hregister,
|
||||||
|
@ -91,6 +91,9 @@ uses
|
|||||||
procedure g_overflowcheck(list: TAsmList; const Loc: tlocation; def: tdef); override;
|
procedure g_overflowcheck(list: TAsmList; const Loc: tlocation; def: tdef); override;
|
||||||
procedure g_overflowCheck_loc(List:TAsmList;const Loc:TLocation;def:TDef;var ovloc : tlocation); override;
|
procedure g_overflowCheck_loc(List:TAsmList;const Loc:TLocation;def:TDef;var ovloc : tlocation); 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 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;
|
||||||
@ -1100,6 +1103,23 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure thlcgllvm.g_ptrtypecast_reg(list: TAsmList; fromdef, todef: tpointerdef; reg: tregister);
|
||||||
|
begin
|
||||||
|
{ will insert a bitcast if necessary }
|
||||||
|
a_load_reg_reg(list,fromdef,todef,reg,reg);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
procedure thlcgllvm.g_ptrtypecast_ref(list: TAsmList; fromdef, todef: tpointerdef; var ref: treference);
|
||||||
|
var
|
||||||
|
hreg: tregister;
|
||||||
|
begin
|
||||||
|
hreg:=getaddresregister(list,todef);
|
||||||
|
a_loadaddr_ref_reg(list,fromdef.pointeddef,todef,ref,hreg);
|
||||||
|
reference_reset_base(ref,todef,hreg,0,ref.alignment);
|
||||||
|
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