* 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:
Jonas Maebe 2013-06-02 14:05:07 +00:00
parent e3594452b5
commit 9938169d2c
8 changed files with 12 additions and 12 deletions

View File

@ -439,7 +439,7 @@ unit cpupara;
else else
begin begin
paraloc^.size:=paracgsize; paraloc^.size:=paracgsize;
paraloc^.def:=get_paraloc_def(paradef,paracgsize,paralen,firstparaloc); paraloc^.def:=get_paraloc_def(paradef,paralen,firstparaloc);
end; end;
case loc of case loc of
LOC_REGISTER: LOC_REGISTER:

View File

@ -366,7 +366,7 @@ unit cpupara;
{ LOC_REFERENCE covers always the overleft } { LOC_REFERENCE covers always the overleft }
paraloc^.loc:=LOC_REFERENCE; paraloc^.loc:=LOC_REFERENCE;
paraloc^.size:=int_cgsize(paralen); 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 if (side=callerside) then
paraloc^.reference.index:=NR_STACK_POINTER_REG; paraloc^.reference.index:=NR_STACK_POINTER_REG;

View File

@ -531,7 +531,7 @@ unit cpupara;
else else
begin begin
l:=paralen; l:=paralen;
paraloc^.def:=get_paraloc_def(paradef,paracgsize,l,firstparaloc); paraloc^.def:=get_paraloc_def(paradef,l,firstparaloc);
end; end;
paraloc^.size:=int_cgsize(l); paraloc^.size:=int_cgsize(l);
end; end;

View File

@ -396,7 +396,7 @@ unit cpupara;
{$endif DEBUG_CHARLIE} {$endif DEBUG_CHARLIE}
paraloc^.loc:=LOC_REFERENCE; paraloc^.loc:=LOC_REFERENCE;
paraloc^.size:=int_cgsize(paralen); 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 if (side = callerside) then
paraloc^.reference.index:=NR_STACK_POINTER_REG paraloc^.reference.index:=NR_STACK_POINTER_REG
else else

View File

@ -463,7 +463,7 @@ implementation
begin begin
paraloc^.loc:=LOC_REFERENCE; paraloc^.loc:=LOC_REFERENCE;
paraloc^.size:=int_cgsize(paralen); 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 if side=callerside then
begin begin

View File

@ -151,9 +151,9 @@ unit paramgr;
function handle_common_ret_in_param(def:tdef;pd:tabstractprocdef;out retinparam:boolean):boolean; 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, { 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 } 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; end;
@ -610,14 +610,14 @@ implementation
end; 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 begin
if fullsize then if fullsize then
result:=paradef result:=paradef
{ no support for 128 bit ints -> tcgsize2orddef can't handle { no support for 128 bit ints -> tcgsize2orddef can't handle
OS_(S)128 } OS_(S)128 }
else if not(paracgsize in [OS_NO,OS_128,OS_S128]) then else if restlen in [1,2,4,8] then
result:=cgsize_orddef(paracgsize) result:=cgsize_orddef(int_cgsize(paracgsize))
else else
result:=getarraydef(u8inttype,restlen); result:=getarraydef(u8inttype,restlen);
end; end;

View File

@ -480,7 +480,7 @@ unit cpupara;
if (paradef.typ<>orddef) then if (paradef.typ<>orddef) then
begin begin
paracgsize:=int_cgsize(paralen); paracgsize:=int_cgsize(paralen);
locdef:=get_paraloc_def(paradef,paracgsize,paralen,firstparaloc); locdef:=get_paraloc_def(paradef,paralen,firstparaloc);
end; end;
if (paracgsize in [OS_NO,OS_64,OS_S64,OS_128,OS_S128]) then if (paracgsize in [OS_NO,OS_64,OS_S64,OS_128,OS_S128]) then
begin begin

View File

@ -387,7 +387,7 @@ begin
if (paracgsize <> OS_NO) and (paradef.typ <> orddef) then if (paracgsize <> OS_NO) and (paradef.typ <> orddef) then
begin begin
paracgsize := int_cgsize(paralen); paracgsize := int_cgsize(paralen);
locdef:=get_paraloc_def(paradef,paracgsize,paralen,firstparaloc); locdef:=get_paraloc_def(paradef,paralen,firstparaloc);
end; end;
{ aix requires that record data (including partial data) stored in { aix requires that record data (including partial data) stored in