mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-07 17:13:02 +02:00
* avr stackframe generation improved
git-svn-id: branches/avr@17048 -
This commit is contained in:
parent
9234486a42
commit
e95bf26148
@ -33,7 +33,6 @@ unit cpupi;
|
|||||||
|
|
||||||
type
|
type
|
||||||
tavrprocinfo = class(tcgprocinfo)
|
tavrprocinfo = class(tcgprocinfo)
|
||||||
floatregstart : aint;
|
|
||||||
// procedure handle_body_start;override;
|
// procedure handle_body_start;override;
|
||||||
// procedure after_pass1;override;
|
// procedure after_pass1;override;
|
||||||
procedure set_first_temp_offset;override;
|
procedure set_first_temp_offset;override;
|
||||||
@ -54,26 +53,14 @@ unit cpupi;
|
|||||||
|
|
||||||
procedure tavrprocinfo.set_first_temp_offset;
|
procedure tavrprocinfo.set_first_temp_offset;
|
||||||
begin
|
begin
|
||||||
{ We allocate enough space to save all registers because we can't determine
|
|
||||||
the necessary space because the used registers aren't known before
|
|
||||||
secondpass is run. Even worse, patching
|
|
||||||
the local offsets after generating the code could cause trouble because
|
|
||||||
"shifter" constants could change to non-"shifter" constants. This
|
|
||||||
is especially a problem when taking the address of a local. For now,
|
|
||||||
this extra memory should hurt less than generating all local contants with offsets
|
|
||||||
>256 as non shifter constants }
|
|
||||||
if tg.direction = -1 then
|
if tg.direction = -1 then
|
||||||
tg.setfirsttemp(-12-28)
|
tg.setfirsttemp(0)
|
||||||
else
|
else
|
||||||
tg.setfirsttemp(maxpushedparasize);
|
tg.setfirsttemp(maxpushedparasize);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
function tavrprocinfo.calc_stackframe_size:longint;
|
function tavrprocinfo.calc_stackframe_size:longint;
|
||||||
var
|
|
||||||
firstfloatreg,lastfloatreg,
|
|
||||||
r : byte;
|
|
||||||
floatsavesize : aword;
|
|
||||||
begin
|
begin
|
||||||
maxpushedparasize:=align(maxpushedparasize,max(current_settings.alignment.localalignmin,4));
|
maxpushedparasize:=align(maxpushedparasize,max(current_settings.alignment.localalignmin,4));
|
||||||
end;
|
end;
|
||||||
@ -82,3 +69,4 @@ unit cpupi;
|
|||||||
begin
|
begin
|
||||||
cprocinfo:=tavrprocinfo;
|
cprocinfo:=tavrprocinfo;
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ implementation
|
|||||||
tempfreelist:=nil;
|
tempfreelist:=nil;
|
||||||
templist:=nil;
|
templist:=nil;
|
||||||
{ we could create a new child class for this but I don't if it is worth the effort (FK) }
|
{ we could create a new child class for this but I don't if it is worth the effort (FK) }
|
||||||
{$if defined(powerpc) or defined(powerpc64)}
|
{$if defined(powerpc) or defined(powerpc64) or defined(avr)}
|
||||||
direction:=1;
|
direction:=1;
|
||||||
{$else}
|
{$else}
|
||||||
direction:=-1;
|
direction:=-1;
|
||||||
|
Loading…
Reference in New Issue
Block a user