* fixed arg. area calculation

This commit is contained in:
florian 2004-02-19 17:07:42 +00:00
parent 4c95007b2b
commit 06a33abebd
7 changed files with 48 additions and 18 deletions

View File

@ -2439,13 +2439,16 @@ type
{ calculate the parameter info for the procdef }
if not procdefinition.has_paraloc_info then
begin
paramanager.create_paraloc_info(procdefinition,callerside);
procdefinition.requiredargarea:=paramanager.create_paraloc_info(procdefinition,callerside);
procdefinition.has_paraloc_info:=true;
end;
current_procinfo.maxpushedparasize:=max(current_procinfo.maxpushedparasize,procdefinition.requiredargarea);
{ calculate the parameter info for varargs }
if assigned(varargsparas) then
paramanager.create_varargs_paraloc_info(procdefinition,varargsparas);
current_procinfo.maxpushedparasize:=max(current_procinfo.maxpushedparasize,
paramanager.create_varargs_paraloc_info(procdefinition,varargsparas));
{ work trough all parameters to get the register requirements }
if assigned(left) then
@ -2716,7 +2719,10 @@ begin
end.
{
$Log$
Revision 1.225 2004-02-13 15:42:21 peter
Revision 1.226 2004-02-19 17:07:42 florian
* fixed arg. area calculation
Revision 1.225 2004/02/13 15:42:21 peter
* compare_defs_ext has now a options argument
* fixes for variants

View File

@ -623,7 +623,7 @@ implementation
{ compare only if the definition is not hidden }
if not procdefcoll^.hidden then
begin
{ check that all methods have overload directive }
{ check that all methods have overload directive }
if not(m_fpc in aktmodeswitches) and
(_class=pd._class) and
(procdefcoll^.data._class=pd._class) and
@ -634,7 +634,7 @@ implementation
include(procdefcoll^.data.procoptions,po_overload);
include(pd.procoptions,po_overload);
end;
{ check if one of the two methods has virtual }
if (po_virtualmethod in procdefcoll^.data.procoptions) or
(po_virtualmethod in pd.procoptions) then
@ -1340,6 +1340,7 @@ implementation
dataSegment.concat(Tai_symbol_end.Createname(_class.vmt_mangledname));
end;
procedure tclassheader.adjustselfvalue(procdef: tprocdef;ioffset: aword);
var
hsym : tsym;
@ -1349,7 +1350,7 @@ implementation
{ calculate the parameter info for the procdef }
if not procdef.has_paraloc_info then
begin
paramanager.create_paraloc_info(procdef,callerside);
procdef.requiredargarea:=paramanager.create_paraloc_info(procdef,callerside);
procdef.has_paraloc_info:=true;
end;
hsym:=tsym(procdef.parast.search('self'));
@ -1379,7 +1380,10 @@ initialization
end.
{
$Log$
Revision 1.61 2004-02-13 15:41:24 peter
Revision 1.62 2004-02-19 17:07:42 florian
* fixed arg. area calculation
Revision 1.61 2004/02/13 15:41:24 peter
* overload directive checking for methods is now done
when the vmt is generated

View File

@ -406,6 +406,7 @@ unit cpupara;
curfloatreg:=nextfloatreg;
curmmreg:=nextmmreg;
cur_stack_offset:=stack_offset;
result:=cur_stack_offset;
end;
@ -453,7 +454,10 @@ begin
end.
{
$Log$
Revision 1.58 2004-02-11 23:18:59 florian
Revision 1.59 2004-02-19 17:07:42 florian
* fixed arg. area calculation
Revision 1.58 2004/02/11 23:18:59 florian
* fixed to compile the rtl again
Revision 1.57 2004/01/17 15:55:11 jonas

View File

@ -36,8 +36,6 @@ unit cpupi;
tppcprocinfo = class(tcgprocinfo)
{ offset where the frame pointer from the outer procedure is stored. }
parent_framepointer_offset : longint;
{ max. of space need for parameters, currently used by the PowerPC port only }
maxpushedparasize : aword;
constructor create(aparent:tprocinfo);override;
procedure set_first_temp_offset;override;
procedure allocate_push_parasize(size: longint);override;
@ -75,6 +73,8 @@ unit cpupi;
ofs:=align(maxpushedparasize+LinkageAreaSizeAIX,16);
abi_powerpc_sysv:
ofs:=align(maxpushedparasize+LinkageAreaSizeSYSV,16);
else
internalerror(200402191);
end;
tg.setfirsttemp(ofs);
end
@ -145,7 +145,10 @@ begin
end.
{
$Log$
Revision 1.33 2003-12-29 14:17:50 jonas
Revision 1.34 2004-02-19 17:07:42 florian
* fixed arg. area calculation
Revision 1.33 2003/12/29 14:17:50 jonas
* fixed saving/restoring of volatile fpu registers under sysv
+ better provisions for abi differences regarding fpu registers that have
to be saved

View File

@ -93,6 +93,9 @@ unit procinfo;
{ Data (like jump tables) that belongs to this routine }
aktlocaldata : taasmoutput;
{ max. of space need for parameters }
maxpushedparasize : aword;
constructor create(aparent:tprocinfo);virtual;
destructor destroy;override;
@ -178,7 +181,10 @@ implementation
end.
{
$Log$
Revision 1.11 2003-12-26 14:02:30 peter
Revision 1.12 2004-02-19 17:07:42 florian
* fixed arg. area calculation
Revision 1.11 2003/12/26 14:02:30 peter
* sparc updates
* use registertype in spill_register

View File

@ -674,7 +674,7 @@ implementation
code of the ppc (and possibly other processors) }
if not procdef.has_paraloc_info then
begin
paramanager.create_paraloc_info(procdef,callerside);
procdef.requiredargarea:=paramanager.create_paraloc_info(procdef,callerside);
procdef.has_paraloc_info:=true;
end;
@ -1345,7 +1345,10 @@ implementation
end.
{
$Log$
Revision 1.185 2004-02-08 18:08:59 jonas
Revision 1.186 2004-02-19 17:07:42 florian
* fixed arg. area calculation
Revision 1.185 2004/02/08 18:08:59 jonas
* fixed regvars support. Needs -doldregvars to activate. Only tested with
ppc, other processors should however only require maxregvars and
maxfpuregvars constants in cpubase.pas. Remember to take scratch-

View File

@ -443,6 +443,7 @@ interface
proctypeoption : tproctypeoption;
proccalloption : tproccalloption;
procoptions : tprocoptions;
requiredargarea : aword;
maxparacount,
minparacount : byte;
{$ifdef i386}
@ -5325,15 +5326,15 @@ implementation
internalerror(200402171);
inc(address,tvarsym(hp^.sym).fieldoffset);
def:=tvarsym(hp^.sym).vartype.def;
end;
end;
sl_vec :
begin
if not(assigned(def) and (def.deftype=arraydef)) then
internalerror(200402172);
def:=tarraydef(def).elementtype.def;
inc(address,def.size*hp^.value);
end;
end;
end;
end;
hp:=hp^.next;
end;
rttiList.concat(Tai_const.Create_32bit(address));
@ -6117,7 +6118,10 @@ implementation
end.
{
$Log$
Revision 1.219 2004-02-17 15:57:49 peter
Revision 1.220 2004-02-19 17:07:42 florian
* fixed arg. area calculation
Revision 1.219 2004/02/17 15:57:49 peter
- fix rtti generation for properties containing sl_vec
- fix crash when overloaded operator is not available
- fix record alignment for C style variant records