mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-02 16:50:31 +02:00
* fixed arg. area calculation
This commit is contained in:
parent
4c95007b2b
commit
06a33abebd
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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-
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user