mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 12:29:25 +02:00
* fixed more ppc stuff
This commit is contained in:
parent
0939085ab1
commit
5b33ab3643
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user