mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-19 23:11:48 +02:00
* Added register conversion
This commit is contained in:
parent
83571f3c6d
commit
6e507ba483
@ -451,6 +451,7 @@ interface
|
||||
|
||||
taasmoutput = class(tlinkedlist)
|
||||
function getlasttaifilepos : pfileposinfo;
|
||||
procedure convert_registers;
|
||||
end;
|
||||
|
||||
|
||||
@ -1709,11 +1710,40 @@ uses
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure Taasmoutput.convert_registers;
|
||||
|
||||
var p:Tai;
|
||||
i:shortint;
|
||||
|
||||
begin
|
||||
p:=Tai(first);
|
||||
while assigned(p) do
|
||||
begin
|
||||
case p.typ of
|
||||
ait_regalloc:
|
||||
convert_register_to_enum(Tai_regalloc(p).reg);
|
||||
ait_instruction:
|
||||
begin
|
||||
for i:=0 to Taicpu_abstract(p).ops-1 do
|
||||
if Taicpu_abstract(p).oper[i].typ=Top_reg then
|
||||
convert_register_to_enum(Taicpu_abstract(p).oper[i].reg);
|
||||
{$ifdef i386}
|
||||
convert_register_to_enum(Taicpu_abstract(p).segprefix);
|
||||
{$endif}
|
||||
end;
|
||||
end;
|
||||
p:=Tai(p.next);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.16 2003-01-08 18:43:56 daniel
|
||||
Revision 1.17 2003-01-09 15:49:56 daniel
|
||||
* Added register conversion
|
||||
|
||||
Revision 1.16 2003/01/08 18:43:56 daniel
|
||||
* Tregister changed into a record
|
||||
|
||||
Revision 1.15 2003/01/05 13:36:53 florian
|
||||
|
@ -635,6 +635,8 @@ uses
|
||||
Helpers
|
||||
*****************************************************************************}
|
||||
|
||||
procedure convert_register_to_enum(var r:Tregister);
|
||||
|
||||
function is_calljmp(o:tasmop):boolean;
|
||||
|
||||
function flags_to_cond(const f: TResFlags) : TAsmCond;
|
||||
@ -666,6 +668,9 @@ implementation
|
||||
NR_CL: r.enum:=R_CL; NR_DL: r.enum:=R_DL;
|
||||
NR_AH: r.enum:=R_AH; NR_BH: r.enum:=R_BH;
|
||||
NR_CH: r.enum:=R_CH; NR_DH: r.enum:=R_DH;
|
||||
NR_CS: r.enum:=R_CS; NR_DS: r.enum:=R_DS;
|
||||
NR_ES: r.enum:=R_ES; NR_FS: r.enum:=R_FS;
|
||||
NR_GS: r.enum:=R_GS; NR_SS: r.enum:=R_SS;
|
||||
else
|
||||
internalerror(200301082);
|
||||
end;
|
||||
@ -703,7 +708,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.37 2003-01-08 22:32:36 daniel
|
||||
Revision 1.38 2003-01-09 15:49:56 daniel
|
||||
* Added register conversion
|
||||
|
||||
Revision 1.37 2003/01/08 22:32:36 daniel
|
||||
* Added register convesrion procedure
|
||||
|
||||
Revision 1.36 2003/01/08 18:43:57 daniel
|
||||
|
@ -546,7 +546,7 @@ uses
|
||||
|
||||
procedure inverse_flags(var r : TResFlags);
|
||||
function flags_to_cond(const f: TResFlags) : TAsmCond;
|
||||
|
||||
procedure convert_register_to_enum(var r:Tregister);
|
||||
|
||||
implementation
|
||||
|
||||
@ -597,10 +597,20 @@ implementation
|
||||
flags_to_cond := flags2cond[f];
|
||||
end;
|
||||
|
||||
procedure convert_register_to_enum(var r:Tregister);
|
||||
|
||||
begin
|
||||
{$warning Convert_register_to_enum implementation is missing!}
|
||||
internalerror(200301082);
|
||||
end;
|
||||
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.15 2003-01-08 18:43:57 daniel
|
||||
Revision 1.16 2003-01-09 15:49:56 daniel
|
||||
* Added register conversion
|
||||
|
||||
Revision 1.15 2003/01/08 18:43:57 daniel
|
||||
* Tregister changed into a record
|
||||
|
||||
Revision 1.14 2002/11/30 23:33:03 carl
|
||||
|
@ -326,13 +326,19 @@ implementation
|
||||
procinfo.procdef.fpu_used:=p.registersfpu;
|
||||
|
||||
end;
|
||||
{$ifdef i386}
|
||||
exprasmlist.convert_registers;
|
||||
{$endif}
|
||||
procinfo.aktproccode.concatlist(exprasmlist);
|
||||
end;
|
||||
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.41 2002-12-22 14:35:39 peter
|
||||
Revision 1.42 2003-01-09 15:49:56 daniel
|
||||
* Added register conversion
|
||||
|
||||
Revision 1.41 2002/12/22 14:35:39 peter
|
||||
* removed Writeln
|
||||
|
||||
Revision 1.40 2002/12/21 23:21:47 mazen
|
||||
|
@ -671,7 +671,7 @@ uses
|
||||
function flags_to_cond(const f: TResFlags) : TAsmCond;
|
||||
procedure create_cond_imm(BO,BI:byte;var r : TAsmCond);
|
||||
procedure create_cond_norm(cond: TAsmCondFlag; cr: byte;var r : TasmCond);
|
||||
|
||||
procedure convert_register_to_enum(var r:Tregister);
|
||||
|
||||
implementation
|
||||
|
||||
@ -745,10 +745,20 @@ implementation
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure convert_register_to_enum(var r:Tregister);
|
||||
|
||||
begin
|
||||
{$warning Convert_register_to_enum implementation is missing!}
|
||||
internalerror(200301082);
|
||||
end;
|
||||
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.39 2003-01-08 18:43:58 daniel
|
||||
Revision 1.40 2003-01-09 15:49:56 daniel
|
||||
* Added register conversion
|
||||
|
||||
Revision 1.39 2003/01/08 18:43:58 daniel
|
||||
* Tregister changed into a record
|
||||
|
||||
Revision 1.38 2002/11/25 17:43:27 peter
|
||||
|
@ -365,7 +365,7 @@ implementation
|
||||
if (cs_optimize in aktglobalswitches) and
|
||||
{ do not optimize pure assembler procedures }
|
||||
((procinfo.flags and pi_is_assembler)=0) then
|
||||
Optimize(procinfo.aktproccode);
|
||||
optimize(procinfo.aktproccode);
|
||||
{$endif NoOpt}
|
||||
{ save local data (casetable) also in the same file }
|
||||
if assigned(procinfo.aktlocaldata) and
|
||||
@ -844,7 +844,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.88 2003-01-08 18:43:56 daniel
|
||||
Revision 1.89 2003-01-09 15:49:56 daniel
|
||||
* Added register conversion
|
||||
|
||||
Revision 1.88 2003/01/08 18:43:56 daniel
|
||||
* Tregister changed into a record
|
||||
|
||||
Revision 1.87 2003/01/03 20:35:08 peter
|
||||
|
@ -510,7 +510,12 @@ const
|
||||
|
||||
FUNCTION is_calljmp(o:tasmop):boolean;
|
||||
FUNCTION flags_to_cond(CONST f:TResFlags):TAsmCond;
|
||||
procedure convert_register_to_enum(var r:Tregister);
|
||||
|
||||
IMPLEMENTATION
|
||||
|
||||
uses verbose;
|
||||
|
||||
const
|
||||
CallJmpOp=[A_JMPL..A_CBccc];
|
||||
function is_calljmp(o:tasmop):boolean;
|
||||
@ -528,10 +533,24 @@ function flags_to_cond(const f:TResFlags):TAsmCond;
|
||||
BEGIN
|
||||
result:=flags_2_cond[f];
|
||||
END;
|
||||
|
||||
procedure convert_register_to_enum(var r:Tregister);
|
||||
|
||||
begin
|
||||
{$warning Convert_register_to_enum implementation is missing!}
|
||||
internalerror(200301082);
|
||||
end;
|
||||
|
||||
END.
|
||||
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.18 2003-01-08 18:43:58 daniel
|
||||
Revision 1.19 2003-01-09 15:49:56 daniel
|
||||
* Added register conversion
|
||||
|
||||
Revision 1.18 2003/01/08 18:43:58 daniel
|
||||
* Tregister changed into a record
|
||||
|
||||
Revision 1.17 2003/01/05 20:39:53 mazen
|
||||
|
Loading…
Reference in New Issue
Block a user