mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-14 20:39:34 +02:00
* don't use the paracgsize in get_paraloc_def(), because it generally
contains the tcgsize of the entire parameter rather than only of what is left (-> calculate it from the remaining parameter length) git-svn-id: trunk@24776 -
This commit is contained in:
parent
e3594452b5
commit
9938169d2c
@ -439,7 +439,7 @@ unit cpupara;
|
||||
else
|
||||
begin
|
||||
paraloc^.size:=paracgsize;
|
||||
paraloc^.def:=get_paraloc_def(paradef,paracgsize,paralen,firstparaloc);
|
||||
paraloc^.def:=get_paraloc_def(paradef,paralen,firstparaloc);
|
||||
end;
|
||||
case loc of
|
||||
LOC_REGISTER:
|
||||
|
@ -366,7 +366,7 @@ unit cpupara;
|
||||
{ LOC_REFERENCE covers always the overleft }
|
||||
paraloc^.loc:=LOC_REFERENCE;
|
||||
paraloc^.size:=int_cgsize(paralen);
|
||||
paraloc^.def:=get_paraloc_def(paradef,paracgsize,paralen,firstparaloc);
|
||||
paraloc^.def:=get_paraloc_def(paradef,paralen,firstparaloc);
|
||||
|
||||
if (side=callerside) then
|
||||
paraloc^.reference.index:=NR_STACK_POINTER_REG;
|
||||
|
@ -531,7 +531,7 @@ unit cpupara;
|
||||
else
|
||||
begin
|
||||
l:=paralen;
|
||||
paraloc^.def:=get_paraloc_def(paradef,paracgsize,l,firstparaloc);
|
||||
paraloc^.def:=get_paraloc_def(paradef,l,firstparaloc);
|
||||
end;
|
||||
paraloc^.size:=int_cgsize(l);
|
||||
end;
|
||||
|
@ -396,7 +396,7 @@ unit cpupara;
|
||||
{$endif DEBUG_CHARLIE}
|
||||
paraloc^.loc:=LOC_REFERENCE;
|
||||
paraloc^.size:=int_cgsize(paralen);
|
||||
paraloc^.def:=get_paraloc_def(paradef,paraloc^.size,paralen,firstparaloc);
|
||||
paraloc^.def:=get_paraloc_def(paradef,paralen,firstparaloc);
|
||||
if (side = callerside) then
|
||||
paraloc^.reference.index:=NR_STACK_POINTER_REG
|
||||
else
|
||||
|
@ -463,7 +463,7 @@ implementation
|
||||
begin
|
||||
paraloc^.loc:=LOC_REFERENCE;
|
||||
paraloc^.size:=int_cgsize(paralen);
|
||||
paraloc^.def:=get_paraloc_def(locdef,paraloc^.size,paralen,firstparaloc);
|
||||
paraloc^.def:=get_paraloc_def(locdef,paralen,firstparaloc);
|
||||
|
||||
if side=callerside then
|
||||
begin
|
||||
|
@ -151,9 +151,9 @@ unit paramgr;
|
||||
function handle_common_ret_in_param(def:tdef;pd:tabstractprocdef;out retinparam:boolean):boolean;
|
||||
|
||||
{ returns the def to use for a tparalocation part of a cgpara for paradef,
|
||||
for which the tcgsize is locsize and the integer length is restlen.
|
||||
for which the def is paradef and the integer length is restlen.
|
||||
fullsize is true if restlen equals the full paradef size }
|
||||
function get_paraloc_def(paradef: tdef; paracgsize: tcgsize; restlen: aint; fullsize: boolean): tdef;
|
||||
function get_paraloc_def(paradef: tdef; restlen: aint; fullsize: boolean): tdef;
|
||||
end;
|
||||
|
||||
|
||||
@ -610,14 +610,14 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function tparamanager.get_paraloc_def(paradef: tdef; paracgsize: tcgsize; restlen: aint; fullsize: boolean): tdef;
|
||||
function tparamanager.get_paraloc_def(paradef: tdef; restlen: aint; fullsize: boolean): tdef;
|
||||
begin
|
||||
if fullsize then
|
||||
result:=paradef
|
||||
{ no support for 128 bit ints -> tcgsize2orddef can't handle
|
||||
OS_(S)128 }
|
||||
else if not(paracgsize in [OS_NO,OS_128,OS_S128]) then
|
||||
result:=cgsize_orddef(paracgsize)
|
||||
else if restlen in [1,2,4,8] then
|
||||
result:=cgsize_orddef(int_cgsize(paracgsize))
|
||||
else
|
||||
result:=getarraydef(u8inttype,restlen);
|
||||
end;
|
||||
|
@ -480,7 +480,7 @@ unit cpupara;
|
||||
if (paradef.typ<>orddef) then
|
||||
begin
|
||||
paracgsize:=int_cgsize(paralen);
|
||||
locdef:=get_paraloc_def(paradef,paracgsize,paralen,firstparaloc);
|
||||
locdef:=get_paraloc_def(paradef,paralen,firstparaloc);
|
||||
end;
|
||||
if (paracgsize in [OS_NO,OS_64,OS_S64,OS_128,OS_S128]) then
|
||||
begin
|
||||
|
@ -387,7 +387,7 @@ begin
|
||||
if (paracgsize <> OS_NO) and (paradef.typ <> orddef) then
|
||||
begin
|
||||
paracgsize := int_cgsize(paralen);
|
||||
locdef:=get_paraloc_def(paradef,paracgsize,paralen,firstparaloc);
|
||||
locdef:=get_paraloc_def(paradef,paralen,firstparaloc);
|
||||
end;
|
||||
|
||||
{ aix requires that record data (including partial data) stored in
|
||||
|
Loading…
Reference in New Issue
Block a user