mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 17:49:13 +02:00
* count address regs separate
This commit is contained in:
parent
7e9e15cce8
commit
e21dab9739
@ -513,13 +513,13 @@ uses
|
|||||||
{ c_countusableregsxxx = amount of registers in the usableregsxxx set }
|
{ c_countusableregsxxx = amount of registers in the usableregsxxx set }
|
||||||
|
|
||||||
maxintregs = 4;
|
maxintregs = 4;
|
||||||
intregs = [R_EAX..R_BL];
|
intregs = [R_EAX..R_BL]-[R_ESI,R_SI];
|
||||||
{$ifdef newra}
|
{$ifdef newra}
|
||||||
usableregsint = [first_imreg..last_imreg];
|
usableregsint = [first_imreg..last_imreg];
|
||||||
{$else}
|
{$else}
|
||||||
usableregsint = [RS_EAX,RS_EBX,RS_ECX,RS_EDX,RS_ESI];
|
usableregsint = [RS_EAX,RS_EBX,RS_ECX,RS_EDX];
|
||||||
{$endif}
|
{$endif}
|
||||||
c_countusableregsint = 5;
|
c_countusableregsint = 4;
|
||||||
|
|
||||||
maxfpuregs = 8;
|
maxfpuregs = 8;
|
||||||
fpuregs = [R_ST0..R_ST7];
|
fpuregs = [R_ST0..R_ST7];
|
||||||
@ -530,14 +530,14 @@ uses
|
|||||||
usableregsmm = [R_MM0..R_MM7];
|
usableregsmm = [R_MM0..R_MM7];
|
||||||
c_countusableregsmm = 8;
|
c_countusableregsmm = 8;
|
||||||
|
|
||||||
maxaddrregs = 0;
|
maxaddrregs = 1;
|
||||||
addrregs = [];
|
addrregs = [R_ESI];
|
||||||
usableregsaddr = [];
|
usableregsaddr = [RS_ESI];
|
||||||
c_countusableregsaddr = 0;
|
c_countusableregsaddr = 1;
|
||||||
|
|
||||||
|
|
||||||
firstsaveintreg = RS_EAX;
|
firstsaveintreg = RS_EAX;
|
||||||
lastsaveintreg = RS_ESI;
|
lastsaveintreg = RS_EDX;
|
||||||
firstsavefpureg = R_NO;
|
firstsavefpureg = R_NO;
|
||||||
lastsavefpureg = R_NO;
|
lastsavefpureg = R_NO;
|
||||||
firstsavemmreg = R_MM0;
|
firstsavemmreg = R_MM0;
|
||||||
@ -814,7 +814,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.45 2003-03-28 19:16:57 peter
|
Revision 1.46 2003-04-21 19:16:50 peter
|
||||||
|
* count address regs separate
|
||||||
|
|
||||||
|
Revision 1.45 2003/03/28 19:16:57 peter
|
||||||
* generic constructor working for i386
|
* generic constructor working for i386
|
||||||
* remove fixed self register
|
* remove fixed self register
|
||||||
* esi added as address register for i386
|
* esi added as address register for i386
|
||||||
|
@ -240,28 +240,31 @@ unit rgcpu;
|
|||||||
|
|
||||||
function trgcpu.getaddressregister(list:Taasmoutput):Tregister;
|
function trgcpu.getaddressregister(list:Taasmoutput):Tregister;
|
||||||
begin
|
begin
|
||||||
if countunusedregsint=0 then
|
if countunusedregsaddr>0 then
|
||||||
internalerror(10);
|
begin
|
||||||
result.enum:=R_INTREGISTER;
|
result.enum:=R_INTREGISTER;
|
||||||
{$ifdef TEMPREGDEBUG}
|
{$ifdef TEMPREGDEBUG}
|
||||||
if curptree^.usableregsint-countunusedregsint>curptree^.registers32 then
|
if curptree^.usableregsaddr-countunusedregsaddr>curptree^.registers32 then
|
||||||
internalerror(10);
|
internalerror(10);
|
||||||
{$endif TEMPREGDEBUG}
|
{$endif TEMPREGDEBUG}
|
||||||
{$ifdef EXTTEMPREGDEBUG}
|
{$ifdef EXTTEMPREGDEBUG}
|
||||||
if curptree^.usableregs-countunusedregistersint>curptree^^.reallyusedregs then
|
if curptree^.usableregs-countunusedregistersaddr>curptree^^.reallyusedregs then
|
||||||
curptree^.reallyusedregs:=curptree^^.usableregs-countunusedregistersint;
|
curptree^.reallyusedregs:=curptree^^.usableregs-countunusedregistersaddr;
|
||||||
{$endif EXTTEMPREGDEBUG}
|
{$endif EXTTEMPREGDEBUG}
|
||||||
if RS_ESI in unusedregsint then
|
if RS_ESI in unusedregsaddr then
|
||||||
begin
|
begin
|
||||||
dec(countunusedregsint);
|
dec(countunusedregsaddr);
|
||||||
exclude(unusedregsint,RS_ESI);
|
exclude(unusedregsaddr,RS_ESI);
|
||||||
include(usedintinproc,RS_ESI);
|
include(usedaddrinproc,RS_ESI);
|
||||||
result.number:=NR_ESI;
|
result.number:=NR_ESI;
|
||||||
{$ifdef TEMPREGDEBUG}
|
{$ifdef TEMPREGDEBUG}
|
||||||
reg_user[R_ESI]:=curptree^;
|
reg_user[R_ESI]:=curptree^;
|
||||||
{$endif TEMPREGDEBUG}
|
{$endif TEMPREGDEBUG}
|
||||||
exprasmlist.concat(tai_regalloc.alloc(result));
|
exprasmlist.concat(tai_regalloc.alloc(result));
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
internalerror(10);
|
||||||
|
end
|
||||||
else
|
else
|
||||||
result:=getregisterint(list,OS_ADDR);
|
result:=getregisterint(list,OS_ADDR);
|
||||||
end;
|
end;
|
||||||
@ -559,7 +562,10 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.17 2003-03-28 19:16:57 peter
|
Revision 1.18 2003-04-21 19:16:50 peter
|
||||||
|
* count address regs separate
|
||||||
|
|
||||||
|
Revision 1.17 2003/03/28 19:16:57 peter
|
||||||
* generic constructor working for i386
|
* generic constructor working for i386
|
||||||
* remove fixed self register
|
* remove fixed self register
|
||||||
* esi added as address register for i386
|
* esi added as address register for i386
|
||||||
|
@ -131,14 +131,17 @@ unit rgobj;
|
|||||||
{ allocated }
|
{ allocated }
|
||||||
lastintreg:Tsuperregister;
|
lastintreg:Tsuperregister;
|
||||||
unusedregsint,usableregsint:Tsupregset;
|
unusedregsint,usableregsint:Tsupregset;
|
||||||
|
unusedregsaddr,usableregsaddr:Tsupregset;
|
||||||
unusedregsfpu,usableregsfpu : tregisterset;
|
unusedregsfpu,usableregsfpu : tregisterset;
|
||||||
unusedregsmm,usableregsmm : tregisterset;
|
unusedregsmm,usableregsmm : tregisterset;
|
||||||
{ these counters contain the number of elements in the }
|
{ these counters contain the number of elements in the }
|
||||||
{ unusedregsxxx/usableregsxxx sets }
|
{ unusedregsxxx/usableregsxxx sets }
|
||||||
countunusedregsint,
|
countunusedregsint,
|
||||||
|
countunusedregsaddr,
|
||||||
countunusedregsfpu,
|
countunusedregsfpu,
|
||||||
countunusedregsmm : byte;
|
countunusedregsmm : byte;
|
||||||
countusableregsint,
|
countusableregsint,
|
||||||
|
countusableregsaddr,
|
||||||
countusableregsfpu,
|
countusableregsfpu,
|
||||||
countusableregsmm : byte;
|
countusableregsmm : byte;
|
||||||
|
|
||||||
@ -147,7 +150,10 @@ unit rgobj;
|
|||||||
}
|
}
|
||||||
usedbyproc,
|
usedbyproc,
|
||||||
usedinproc : tregisterset;
|
usedinproc : tregisterset;
|
||||||
usedintbyproc,usedintinproc:Tsupregset;
|
usedintbyproc,
|
||||||
|
usedaddrbyproc,
|
||||||
|
usedintinproc,
|
||||||
|
usedaddrinproc:Tsupregset;
|
||||||
|
|
||||||
reg_pushes : regvar_longintarray;
|
reg_pushes : regvar_longintarray;
|
||||||
reg_pushes_int : regvarint_longintarray;
|
reg_pushes_int : regvarint_longintarray;
|
||||||
@ -1397,7 +1403,10 @@ end.
|
|||||||
|
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.34 2003-04-17 16:48:21 daniel
|
Revision 1.35 2003-04-21 19:16:49 peter
|
||||||
|
* count address regs separate
|
||||||
|
|
||||||
|
Revision 1.34 2003/04/17 16:48:21 daniel
|
||||||
* Added some code to keep track of move instructions in register
|
* Added some code to keep track of move instructions in register
|
||||||
allocator
|
allocator
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user