mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2026-01-04 15:20:45 +01:00
* support forcing to write the parameter alignment for parameters for LLVM,
even when it's the same as the stack alignment (it can also refer to the
alignment of the data pointed to by pointer parameters)
git-svn-id: branches/debug_eh@41729 -
This commit is contained in:
parent
3b254affb7
commit
fcde89cb26
@ -204,7 +204,7 @@ interface
|
||||
pllvmcallpara = ^tllvmcallpara;
|
||||
tllvmcallpara = record
|
||||
def: tdef;
|
||||
alignment: byte;
|
||||
alignment: shortint;
|
||||
valueext: tllvmvalueextension;
|
||||
byval,
|
||||
sret: boolean;
|
||||
|
||||
@ -339,10 +339,13 @@ implementation
|
||||
owner.writer.AsmWrite(' byval');
|
||||
if para^.sret then
|
||||
owner.writer.AsmWrite(' sret');
|
||||
if para^.alignment<>std_param_align then
|
||||
{ For byval, this means "alignment on the stack" and of the passed source data.
|
||||
For other pointer parameters, this means "alignment of the passed source data" }
|
||||
if (para^.alignment<>std_param_align) or
|
||||
(para^.alignment<0) then
|
||||
begin
|
||||
owner.writer.AsmWrite(' align ');
|
||||
owner.writer.AsmWrite(tostr(para^.alignment));
|
||||
owner.writer.AsmWrite(tostr(abs(para^.alignment)));
|
||||
end;
|
||||
case para^.typ of
|
||||
top_reg:
|
||||
|
||||
@ -1197,8 +1197,8 @@ implementation
|
||||
if indivalign then
|
||||
begin
|
||||
paramanager.getintparaloc(list,pd,4,volatilepara);
|
||||
destpara.Alignment:=dest.alignment;
|
||||
sourcepara.Alignment:=source.alignment;
|
||||
destpara.Alignment:=-dest.alignment;
|
||||
sourcepara.Alignment:=-source.alignment;
|
||||
end
|
||||
else
|
||||
begin
|
||||
|
||||
@ -106,7 +106,7 @@ unit parabase;
|
||||
Location : PCGParalocation;
|
||||
IntSize : tcgint; { size of the total location in bytes }
|
||||
DefDeref : tderef;
|
||||
Alignment : ShortInt;
|
||||
Alignment : ShortInt; { in case of LLVM, a negative alignment mean: force write the alignment }
|
||||
Size : TCGSize; { Size of the parameter included in all locations }
|
||||
Temporary : boolean; { created on the fly, no permanent references exist to this somewhere that will cause it to be disposed }
|
||||
constructor init;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user