mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 04:26:13 +02:00
* the code generator knows now if parameters are in registers
This commit is contained in:
parent
8ec8b78cec
commit
ed950491a8
@ -652,7 +652,11 @@ unit cgobj;
|
|||||||
LOC_CONSTANT:
|
LOC_CONSTANT:
|
||||||
a_load_const_reg(list,loc.size,loc.value,reg);
|
a_load_const_reg(list,loc.size,loc.value,reg);
|
||||||
else
|
else
|
||||||
internalerror(200109092);
|
begin
|
||||||
|
writeln(ord(loc.loc));
|
||||||
|
runerror(216);
|
||||||
|
internalerror(200109092);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1396,7 +1400,10 @@ finalization
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.40 2002-07-29 21:16:02 florian
|
Revision 1.41 2002-07-30 20:50:43 florian
|
||||||
|
* the code generator knows now if parameters are in registers
|
||||||
|
|
||||||
|
Revision 1.40 2002/07/29 21:16:02 florian
|
||||||
* some more ppc fixes
|
* some more ppc fixes
|
||||||
|
|
||||||
Revision 1.39 2002/07/28 15:56:00 jonas
|
Revision 1.39 2002/07/28 15:56:00 jonas
|
||||||
|
@ -106,8 +106,8 @@ implementation
|
|||||||
second_TypeInfo;
|
second_TypeInfo;
|
||||||
end;
|
end;
|
||||||
in_assigned_x :
|
in_assigned_x :
|
||||||
begin
|
begin
|
||||||
second_Assigned;
|
// second_Assigned;
|
||||||
end;
|
end;
|
||||||
in_include_x_y,
|
in_include_x_y,
|
||||||
in_exclude_x_y:
|
in_exclude_x_y:
|
||||||
@ -583,7 +583,10 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.6 2002-07-29 21:23:42 florian
|
Revision 1.7 2002-07-30 20:50:43 florian
|
||||||
|
* the code generator knows now if parameters are in registers
|
||||||
|
|
||||||
|
Revision 1.6 2002/07/29 21:23:42 florian
|
||||||
* more fixes for the ppc
|
* more fixes for the ppc
|
||||||
+ wrappers for the tcnvnode.first_* stuff introduced
|
+ wrappers for the tcnvnode.first_* stuff introduced
|
||||||
|
|
||||||
@ -601,4 +604,4 @@ end.
|
|||||||
|
|
||||||
Revision 1.1 2002/07/24 04:07:49 carl
|
Revision 1.1 2002/07/24 04:07:49 carl
|
||||||
+ first revision (incomplete)
|
+ first revision (incomplete)
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,8 @@ unit paramgr;
|
|||||||
}
|
}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure setparalocs(p : tprocdef);
|
||||||
|
|
||||||
var
|
var
|
||||||
paralocdummy : tparalocation;
|
paralocdummy : tparalocation;
|
||||||
paramanager : tparamanager;
|
paramanager : tparamanager;
|
||||||
@ -64,7 +66,7 @@ unit paramgr;
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
cpuinfo,
|
cpuinfo,
|
||||||
symconst,symbase,
|
symconst,symbase,symsym,
|
||||||
defbase;
|
defbase;
|
||||||
|
|
||||||
{ true if the return value is in accumulator (EAX for i386), D0 for 68k }
|
{ true if the return value is in accumulator (EAX for i386), D0 for 68k }
|
||||||
@ -129,13 +131,33 @@ unit paramgr;
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure setparalocs(p : tprocdef);
|
||||||
|
|
||||||
|
var
|
||||||
|
hp : tparaitem;
|
||||||
|
|
||||||
|
begin
|
||||||
|
hp:=tparaitem(p.para.first);
|
||||||
|
while assigned(hp) do
|
||||||
|
begin
|
||||||
|
if (hp.paraloc.loc in [LOC_REGISTER,LOC_FPUREGISTER]) and
|
||||||
|
{ if the parameter isn't regable, we've to work with the local copy }
|
||||||
|
(vo_regable in tvarsym(hp.parasym).varoptions) then
|
||||||
|
tvarsym(hp.parasym).reg:=hp.paraloc.register;
|
||||||
|
hp:=tparaitem(hp.next);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
finalization
|
finalization
|
||||||
paramanager.free;
|
paramanager.free;
|
||||||
end.
|
end.
|
||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.5 2002-07-26 21:15:39 florian
|
Revision 1.6 2002-07-30 20:50:43 florian
|
||||||
|
* the code generator knows now if parameters are in registers
|
||||||
|
|
||||||
|
Revision 1.5 2002/07/26 21:15:39 florian
|
||||||
* rewrote the system handling
|
* rewrote the system handling
|
||||||
|
|
||||||
Revision 1.4 2002/07/20 11:57:55 florian
|
Revision 1.4 2002/07/20 11:57:55 florian
|
||||||
|
@ -52,7 +52,7 @@ implementation
|
|||||||
{$endif}
|
{$endif}
|
||||||
globtype,systems,verbose,
|
globtype,systems,verbose,
|
||||||
cclasses,globals,
|
cclasses,globals,
|
||||||
symconst,symbase,symtype,symsym,
|
symconst,symbase,symtype,symsym,paramgr,
|
||||||
aasmbase,aasmtai,
|
aasmbase,aasmtai,
|
||||||
pass_1,cpubase,cgbase,regvars,nflw,rgobj;
|
pass_1,cpubase,cgbase,regvars,nflw,rgobj;
|
||||||
|
|
||||||
@ -301,6 +301,11 @@ implementation
|
|||||||
end;
|
end;
|
||||||
{$endif OMITSTACKFRAME}
|
{$endif OMITSTACKFRAME}
|
||||||
|
|
||||||
|
{ assign parameter locations }
|
||||||
|
{$ifndef i386}
|
||||||
|
setparalocs(procinfo^.procdef);
|
||||||
|
{$endif i386}
|
||||||
|
|
||||||
{ process register variable stuff (JM) }
|
{ process register variable stuff (JM) }
|
||||||
assign_regvars(p);
|
assign_regvars(p);
|
||||||
load_regvars(procinfo^.aktentrycode,p);
|
load_regvars(procinfo^.aktentrycode,p);
|
||||||
@ -323,7 +328,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.32 2002-07-19 11:41:36 daniel
|
Revision 1.33 2002-07-30 20:50:44 florian
|
||||||
|
* the code generator knows now if parameters are in registers
|
||||||
|
|
||||||
|
Revision 1.32 2002/07/19 11:41:36 daniel
|
||||||
* State tracker work
|
* State tracker work
|
||||||
* The whilen and repeatn are now completely unified into whilerepeatn. This
|
* The whilen and repeatn are now completely unified into whilerepeatn. This
|
||||||
allows the state tracker to change while nodes automatically into
|
allows the state tracker to change while nodes automatically into
|
||||||
|
@ -209,11 +209,7 @@ const
|
|||||||
internalerror(2002072801);
|
internalerror(2002072801);
|
||||||
end;
|
end;
|
||||||
else
|
else
|
||||||
begin
|
internalerror(2002081103);
|
||||||
runerror(216);
|
|
||||||
writeln(ord(locpara.loc));
|
|
||||||
internalerror(2002081103);
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
if locpara.sp_fixup<>0 then
|
if locpara.sp_fixup<>0 then
|
||||||
internalerror(2002081104);
|
internalerror(2002081104);
|
||||||
@ -1457,7 +1453,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.30 2002-07-29 21:23:44 florian
|
Revision 1.31 2002-07-30 20:50:44 florian
|
||||||
|
* the code generator knows now if parameters are in registers
|
||||||
|
|
||||||
|
Revision 1.30 2002/07/29 21:23:44 florian
|
||||||
* more fixes for the ppc
|
* more fixes for the ppc
|
||||||
+ wrappers for the tcnvnode.first_* stuff introduced
|
+ wrappers for the tcnvnode.first_* stuff introduced
|
||||||
|
|
||||||
|
@ -155,7 +155,21 @@ unit cpupara;
|
|||||||
end;
|
end;
|
||||||
LOC_FPUREGISTER:
|
LOC_FPUREGISTER:
|
||||||
begin
|
begin
|
||||||
if nextfloatreg<=R_F8 then
|
if hp.paratyp in [vs_var,vs_out] then
|
||||||
|
begin
|
||||||
|
if nextintreg<=R_8 then
|
||||||
|
begin
|
||||||
|
hp.paraloc.loc:=LOC_REGISTER;
|
||||||
|
hp.paraloc.register:=nextintreg;
|
||||||
|
inc(nextintreg);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
{!!!!!!!}
|
||||||
|
internalerror(2002071006);
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else if nextfloatreg<=R_F8 then
|
||||||
begin
|
begin
|
||||||
hp.paraloc.loc:=LOC_FPUREGISTER;
|
hp.paraloc.loc:=LOC_FPUREGISTER;
|
||||||
hp.paraloc.register:=nextfloatreg;
|
hp.paraloc.register:=nextfloatreg;
|
||||||
@ -169,7 +183,7 @@ unit cpupara;
|
|||||||
end;
|
end;
|
||||||
LOC_REFERENCE:
|
LOC_REFERENCE:
|
||||||
begin
|
begin
|
||||||
if push_addr_param(hp.paratype.def) then
|
if push_addr_param(hp.paratype.def) or (hp.paratyp in [vs_var,vs_out]) then
|
||||||
begin
|
begin
|
||||||
if nextintreg<=R_8 then
|
if nextintreg<=R_8 then
|
||||||
begin
|
begin
|
||||||
@ -210,7 +224,10 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.4 2002-07-28 20:45:22 florian
|
Revision 1.5 2002-07-30 20:50:44 florian
|
||||||
|
* the code generator knows now if parameters are in registers
|
||||||
|
|
||||||
|
Revision 1.4 2002/07/28 20:45:22 florian
|
||||||
+ added direct assembler reader for PowerPC
|
+ added direct assembler reader for PowerPC
|
||||||
|
|
||||||
Revision 1.3 2002/07/26 22:22:10 florian
|
Revision 1.3 2002/07/26 22:22:10 florian
|
||||||
|
Loading…
Reference in New Issue
Block a user