mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 21:48:09 +02:00
llvm: replaced boolean fields in tllvmcallpara with a set
This commit is contained in:
parent
573b2554f4
commit
aa43441ac9
@ -209,14 +209,16 @@ interface
|
||||
destructor destroy; override;
|
||||
end;
|
||||
|
||||
tllvmcallparaflag = (lcp_byval, lcp_sret);
|
||||
tllvmcallparaflags = set of tllvmcallparaflag;
|
||||
|
||||
{ parameter to an llvm call instruction }
|
||||
pllvmcallpara = ^tllvmcallpara;
|
||||
tllvmcallpara = record
|
||||
def: tdef;
|
||||
alignment: shortint;
|
||||
valueext: tllvmvalueextension;
|
||||
byval,
|
||||
sret: boolean;
|
||||
flags: tllvmcallparaflags;
|
||||
case typ: toptype of
|
||||
top_none: ();
|
||||
top_reg: (register: tregister);
|
||||
|
@ -350,9 +350,9 @@ implementation
|
||||
owner.writer.AsmWrite(llvmencodetypename(para^.def));
|
||||
if para^.valueext<>lve_none then
|
||||
owner.writer.AsmWrite(llvmvalueextension2str[para^.valueext]);
|
||||
if para^.byval then
|
||||
if lcp_byval in para^.flags then
|
||||
owner.writer.AsmWrite(llvmparatypeattr(' byval',para^.def,true));
|
||||
if para^.sret then
|
||||
if lcp_sret in para^.flags then
|
||||
owner.writer.AsmWrite(llvmparatypeattr(' sret',para^.def,true));
|
||||
if asmblock and
|
||||
(llvmflag_opaque_ptr_transition in llvmversion_properties[current_settings.llvmversion]) and
|
||||
|
@ -476,21 +476,21 @@ implementation
|
||||
while assigned(paraloc) do
|
||||
begin
|
||||
new(callpara);
|
||||
callpara^.flags:=[];
|
||||
callpara^.def:=paraloc^.def;
|
||||
{ if the paraloc doesn't contain the value itself, it's a byval
|
||||
parameter }
|
||||
if paraloc^.retvalloc then
|
||||
begin
|
||||
callpara^.sret:=true;
|
||||
callpara^.byval:=false;
|
||||
include(callpara^.flags,lcp_sret);
|
||||
end
|
||||
else
|
||||
begin
|
||||
callpara^.sret:=false;
|
||||
callpara^.byval:=not paraloc^.llvmvalueloc;
|
||||
if not paraloc^.llvmvalueloc then
|
||||
include(callpara^.flags,lcp_byval);
|
||||
end;
|
||||
if firstparaloc and
|
||||
callpara^.byval then
|
||||
(lcp_byval in callpara^.flags) then
|
||||
callpara^.alignment:=paras[i]^.Alignment
|
||||
else
|
||||
callpara^.alignment:=std_param_align;
|
||||
|
@ -89,8 +89,7 @@ interface
|
||||
if (sym.typ=paravarsym) and
|
||||
paramanager.push_addr_param(sym.varspez,sym.vardef,current_procinfo.procdef.proccalloption) then
|
||||
callpara^.def:=cpointerdef.getreusable(callpara^.def);
|
||||
callpara^.sret:=false;
|
||||
callpara^.byval:=false;
|
||||
callpara^.flags:=[];
|
||||
callpara^.valueext:=lve_none;
|
||||
callpara^.typ:=top_reg;
|
||||
{ address must be a temp register }
|
||||
|
Loading…
Reference in New Issue
Block a user