* fixed more ppc stuff

This commit is contained in:
florian 2003-10-17 15:25:18 +00:00
parent 0939085ab1
commit 5b33ab3643
4 changed files with 61 additions and 23 deletions

View File

@ -73,14 +73,14 @@ unit cgobj;
{# Gets a register suitable to do integer operations on.}
function getintregister(list:Taasmoutput;size:Tcgsize):Tregister;virtual;abstract;
{# Gets a register suitable to do integer operations on.}
function getaddressregister(list:Taasmoutput):Tregister;virtual;abstract;
function getaddressregister(list:Taasmoutput):Tregister;virtual;
function getfpuregister(list:Taasmoutput;size:Tcgsize):Tregister;virtual;abstract;
function getmmregister(list:Taasmoutput;size:Tcgsize):Tregister;virtual;abstract;
function getflagregister(list:Taasmoutput;size:Tcgsize):Tregister;virtual;abstract;
{Does the generic cg need SIMD registers, like getmmxregister? Or should
the cpu specific child cg object have such a method?}
procedure ungetregister(list:Taasmoutput;r:Tregister);virtual;abstract;
procedure ungetreference(list:Taasmoutput;const r:Treference);virtual;abstract;
procedure ungetreference(list:Taasmoutput;const r:Treference);virtual;
procedure add_move_instruction(instr:Taicpu);virtual;abstract;
@ -563,20 +563,33 @@ implementation
setsubreg(result,subreg);
end;
procedure tcg.a_reg_alloc(list : taasmoutput;r : tregister);
function tcg.getaddressregister(list:Taasmoutput):Tregister;
begin
result:=getintregister(list,OS_ADDR);
end;
procedure tcg.ungetreference(list:Taasmoutput;const r:Treference);
begin
if r.base<>NR_NO then
ungetregister(list,r.base);
end;
procedure tcg.a_reg_alloc(list : taasmoutput;r : tregister);
begin
list.concat(tai_regalloc.alloc(r));
end;
procedure tcg.a_reg_dealloc(list : taasmoutput;r : tregister);
procedure tcg.a_reg_dealloc(list : taasmoutput;r : tregister);
begin
list.concat(tai_regalloc.dealloc(r));
end;
procedure tcg.a_label(list : taasmoutput;l : tasmlabel);
procedure tcg.a_label(list : taasmoutput;l : tasmlabel);
begin
list.concat(tai_label.create(l));
end;
@ -1774,7 +1787,10 @@ finalization
end.
{
$Log$
Revision 1.131 2003-10-17 14:38:32 peter
Revision 1.132 2003-10-17 15:25:18 florian
* fixed more ppc stuff
Revision 1.131 2003/10/17 14:38:32 peter
* 64k registers supported
* fixed some memory leaks

View File

@ -47,11 +47,8 @@ unit cgcpu;
function getmmregister(list:Taasmoutput;size:Tcgsize):Tregister;override;
procedure getexplicitregister(list:Taasmoutput;r:Tregister);override;
procedure ungetregister(list:Taasmoutput;r:Tregister);override;
{!!!
procedure allocexplicitregisters(list:Taasmoutput;rt:Tregistertype;r:Tsuperregisterset);override;
procedure deallocexplicitregisters(list:Taasmoutput;rt:Tregistertype;r:Tsuperregisterset);override;
procedure add_move_instruction(instr:Taicpu);override;
}
procedure do_register_allocation(list:Taasmoutput;headertai:tai);override;
{ passing parameters, per default the parameter is pushed }
{ nr gives the number of the parameter (enumerated from }
@ -178,7 +175,7 @@ const
procedure tcgppc.init_register_allocators;
begin
rgfpu:=trgcpu.create(R_INTREGISTER,R_SUBWHOLE,
rgint:=trgcpu.create(R_INTREGISTER,R_SUBWHOLE,
[RS_R3,RS_R4,RS_R5,RS_R6,RS_R7,RS_R8,
RS_R9,RS_R10,RS_R11,RS_R12,RS_R31,RS_R30,RS_R29,
RS_R28,RS_R27,RS_R26,RS_R25,RS_R24,RS_R23,RS_R22,
@ -254,6 +251,28 @@ const
end;
procedure tcgppc.add_move_instruction(instr:Taicpu);
begin
rgint.add_move_instruction(instr);
end;
procedure tcgppc.do_register_allocation(list:Taasmoutput;headertai:tai);
begin
{ Int }
rgint.do_register_allocation(list,headertai);
rgint.translate_registers(list);
{ FPU }
rgfpu.do_register_allocation(list,headertai);
rgfpu.translate_registers(list);
{ MM }
rgmm.do_register_allocation(list,headertai);
rgmm.translate_registers(list);
end;
procedure tcgppc.a_param_const(list : taasmoutput;size : tcgsize;a : aword;const locpara : tparalocation);
var
ref: treference;
@ -2436,7 +2455,10 @@ begin
end.
{
$Log$
Revision 1.132 2003-10-17 15:08:34 peter
Revision 1.133 2003-10-17 15:25:18 florian
* fixed more ppc stuff
Revision 1.132 2003/10/17 15:08:34 peter
* commented out more obsolete constants
Revision 1.131 2003/10/17 14:52:07 peter

View File

@ -485,8 +485,9 @@ implementation
worklist_moves:=Tlinkedlist.create;
{ Usable registers }
fillchar(usable_registers,sizeof(usable_registers),0);
for i:=low(Ausable) to high(Ausable) do
usable_registers[i]:=Ausable[i];
if high(Ausable)>0 then
for i:=low(Ausable) to high(Ausable) do
usable_registers[i]:=Ausable[i];
usable_registers_cnt:=high(Ausable)+1;
end;
@ -1742,7 +1743,10 @@ end;
end.
{
$Log$
Revision 1.85 2003-10-17 14:38:32 peter
Revision 1.86 2003-10-17 15:25:18 florian
* fixed more ppc stuff
Revision 1.85 2003/10/17 14:38:32 peter
* 64k registers supported
* fixed some memory leaks

View File

@ -43,7 +43,6 @@ unit cgx86;
procedure done_register_allocators;override;
function getintregister(list:Taasmoutput;size:Tcgsize):Tregister;override;
function getaddressregister(list:Taasmoutput):Tregister;override;
function getfpuregister(list:Taasmoutput;size:Tcgsize):Tregister;override;
function getmmregister(list:Taasmoutput;size:Tcgsize):Tregister;override;
procedure getexplicitregister(list:Taasmoutput;r:Tregister);override;
@ -212,12 +211,6 @@ unit cgx86;
end;
function Tcgx86.getaddressregister(list:Taasmoutput):Tregister;
begin
result:=rgint.getregister(list,R_SUBWHOLE);
end;
function Tcgx86.getfpuregister(list:Taasmoutput;size:Tcgsize):Tregister;
begin
result:=trgx86fpu(rgfpu).getregisterfpu(list);
@ -1753,7 +1746,10 @@ unit cgx86;
end.
{
$Log$
Revision 1.80 2003-10-17 14:38:32 peter
Revision 1.81 2003-10-17 15:25:18 florian
* fixed more ppc stuff
Revision 1.80 2003/10/17 14:38:32 peter
* 64k registers supported
* fixed some memory leaks