|
@@ -1650,10 +1650,11 @@ unit cpupara;
|
|
locidx,
|
|
locidx,
|
|
i,j,
|
|
i,j,
|
|
varalign,
|
|
varalign,
|
|
|
|
+ procparaalign,
|
|
paraalign : longint;
|
|
paraalign : longint;
|
|
use_ms_abi : boolean;
|
|
use_ms_abi : boolean;
|
|
begin
|
|
begin
|
|
- paraalign:=get_para_align(p.proccalloption);
|
|
|
|
|
|
+ procparaalign:=get_para_align(p.proccalloption);
|
|
use_ms_abi:=x86_64_use_ms_abi(p.proccalloption);
|
|
use_ms_abi:=x86_64_use_ms_abi(p.proccalloption);
|
|
{ Register parameters are assigned from left to right }
|
|
{ Register parameters are assigned from left to right }
|
|
for i:=0 to paras.count-1 do
|
|
for i:=0 to paras.count-1 do
|
|
@@ -1695,6 +1696,7 @@ unit cpupara;
|
|
paralen:=sizeof(pint);
|
|
paralen:=sizeof(pint);
|
|
paradef:=cpointerdef.getreusable_no_free(paradef);
|
|
paradef:=cpointerdef.getreusable_no_free(paradef);
|
|
paralocdef:=paradef;
|
|
paralocdef:=paradef;
|
|
|
|
+ paraalign:=procparaalign;
|
|
loc[0].def:=paralocdef;
|
|
loc[0].def:=paralocdef;
|
|
loc[1].def:=nil;
|
|
loc[1].def:=nil;
|
|
for j:=2 to high(loc) do
|
|
for j:=2 to high(loc) do
|
|
@@ -1707,7 +1709,7 @@ unit cpupara;
|
|
begin
|
|
begin
|
|
getvalueparaloc(p.proccalloption,hp.varspez,paralocdef,loc);
|
|
getvalueparaloc(p.proccalloption,hp.varspez,paralocdef,loc);
|
|
paralen:=push_size(hp.varspez,paralocdef,p.proccalloption);
|
|
paralen:=push_size(hp.varspez,paralocdef,p.proccalloption);
|
|
- paraalign:=max(paraalign,paradef.alignment);
|
|
|
|
|
|
+ paraalign:=max(procparaalign,paradef.alignment);
|
|
if p.proccalloption = pocall_vectorcall then
|
|
if p.proccalloption = pocall_vectorcall then
|
|
begin
|
|
begin
|
|
{ TODO: Can this set of instructions be put into 'defutil' without it relying on the argument classification? [Kit] }
|
|
{ TODO: Can this set of instructions be put into 'defutil' without it relying on the argument classification? [Kit] }
|
|
@@ -1990,7 +1992,7 @@ unit cpupara;
|
|
else
|
|
else
|
|
paraloc^.reference.index:=NR_FRAME_POINTER_REG;
|
|
paraloc^.reference.index:=NR_FRAME_POINTER_REG;
|
|
varalign:=used_align(size_2_align(paralen),paraalign,paraalign);
|
|
varalign:=used_align(size_2_align(paralen),paraalign,paraalign);
|
|
- paraloc^.reference.offset:=parasize;
|
|
|
|
|
|
+ paraloc^.reference.offset:=align(parasize,varalign);
|
|
parasize:=align(parasize+paralen,varalign);
|
|
parasize:=align(parasize+paralen,varalign);
|
|
paralen:=0;
|
|
paralen:=0;
|
|
end;
|
|
end;
|