mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-02 18:59:30 +01:00
* now uses standard routines in rgHelper unit to search registers by number and by name
This commit is contained in:
parent
bb42874171
commit
75f88a5b90
@ -487,7 +487,6 @@ unit cpubase;
|
||||
procedure inverse_flags(var f: TResFlags);
|
||||
function flags_to_cond(const f: TResFlags) : TAsmCond;
|
||||
function findreg_by_number(r:Tregister):tregisterindex;
|
||||
function findreg_by_stdname(const s:string):byte;
|
||||
function std_regnum_search(const s:string):Tregister;
|
||||
function std_regname(r:Tregister):string;
|
||||
|
||||
@ -497,7 +496,7 @@ unit cpubase;
|
||||
implementation
|
||||
|
||||
uses
|
||||
verbose;
|
||||
rgHelper,verbose;
|
||||
|
||||
|
||||
const
|
||||
@ -550,47 +549,15 @@ unit cpubase;
|
||||
end;
|
||||
|
||||
|
||||
function findreg_by_stdname(const s:string):byte;
|
||||
var
|
||||
i,p : tregisterindex;
|
||||
begin
|
||||
{Binary search.}
|
||||
p:=0;
|
||||
i:=regnumber_count_bsstart;
|
||||
repeat
|
||||
if (p+i<=high(tregisterindex)) and (std_regname_table[std_regname_index[p+i]]<=s) then
|
||||
p:=p+i;
|
||||
i:=i shr 1;
|
||||
until i=0;
|
||||
if std_regname_table[std_regname_index[p]]=s then
|
||||
result:=std_regname_index[p]
|
||||
else
|
||||
result:=0;
|
||||
end;
|
||||
|
||||
|
||||
function findreg_by_number(r:Tregister):tregisterindex;
|
||||
var
|
||||
i,p : tregisterindex;
|
||||
begin
|
||||
{Binary search.}
|
||||
p:=0;
|
||||
i:=regnumber_count_bsstart;
|
||||
repeat
|
||||
if (p+i<=high(tregisterindex)) and (regnumber_table[regnumber_index[p+i]]<=r) then
|
||||
p:=p+i;
|
||||
i:=i shr 1;
|
||||
until i=0;
|
||||
if regnumber_table[regnumber_index[p]]=r then
|
||||
result:=regnumber_index[p]
|
||||
else
|
||||
result:=0;
|
||||
rgHelper.findreg_by_number(r,regnumber_index);
|
||||
end;
|
||||
|
||||
|
||||
function std_regnum_search(const s:string):Tregister;
|
||||
begin
|
||||
result:=regnumber_table[findreg_by_stdname(s)];
|
||||
result:=regnumber_table[findreg_by_name(s,std_regname_table,std_regname_index)];
|
||||
end;
|
||||
|
||||
|
||||
@ -620,7 +587,10 @@ unit cpubase;
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.14 2003-09-05 23:57:01 florian
|
||||
Revision 1.15 2003-10-30 15:02:04 mazen
|
||||
* now uses standard routines in rgHelper unit to search registers by number and by name
|
||||
|
||||
Revision 1.14 2003/09/05 23:57:01 florian
|
||||
* arm is working again as before the new register naming scheme was implemented
|
||||
|
||||
Revision 1.13 2003/09/04 21:07:03 florian
|
||||
|
||||
@ -551,7 +551,7 @@ uses
|
||||
implementation
|
||||
|
||||
uses
|
||||
verbose;
|
||||
rgHelper,verbose;
|
||||
|
||||
const
|
||||
std_regname_table : array[tregisterindex] of string[7] = (
|
||||
@ -644,47 +644,15 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function findreg_by_stdname(const s:string):byte;
|
||||
var
|
||||
i,p : tregisterindex;
|
||||
begin
|
||||
{Binary search.}
|
||||
p:=0;
|
||||
i:=regnumber_count_bsstart;
|
||||
repeat
|
||||
if (p+i<=high(tregisterindex)) and (std_regname_table[std_regname_index[p+i]]<=s) then
|
||||
p:=p+i;
|
||||
i:=i shr 1;
|
||||
until i=0;
|
||||
if std_regname_table[std_regname_index[p]]=s then
|
||||
result:=std_regname_index[p]
|
||||
else
|
||||
result:=0;
|
||||
end;
|
||||
|
||||
|
||||
function findreg_by_number(r:Tregister):tregisterindex;
|
||||
var
|
||||
i,p : tregisterindex;
|
||||
begin
|
||||
{Binary search.}
|
||||
p:=0;
|
||||
i:=regnumber_count_bsstart;
|
||||
repeat
|
||||
if (p+i<=high(tregisterindex)) and (regnumber_table[regnumber_index[p+i]]<=r) then
|
||||
p:=p+i;
|
||||
i:=i shr 1;
|
||||
until i=0;
|
||||
if regnumber_table[regnumber_index[p]]=r then
|
||||
result:=regnumber_index[p]
|
||||
else
|
||||
result:=0;
|
||||
rgHelper.findreg_by_number(r,regnumber_index);
|
||||
end;
|
||||
|
||||
|
||||
function std_regnum_search(const s:string):Tregister;
|
||||
begin
|
||||
result:=regnumber_table[findreg_by_stdname(s)];
|
||||
result:=regnumber_table[findreg_by_name(s,std_regname_table,std_regname_index)];
|
||||
end;
|
||||
|
||||
|
||||
@ -714,7 +682,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.73 2003-10-19 01:34:31 florian
|
||||
Revision 1.74 2003-10-30 15:03:18 mazen
|
||||
* now uses standard routines in rgHelper unit to search registers by number and by name
|
||||
|
||||
Revision 1.73 2003/10/19 01:34:31 florian
|
||||
* some ppc stuff fixed
|
||||
* memory leak fixed
|
||||
|
||||
|
||||
@ -261,6 +261,44 @@ implementation
|
||||
counterpart := A_STD;
|
||||
wasload := false;
|
||||
end;
|
||||
A_STB:
|
||||
begin
|
||||
counterpart := A_LDUB;
|
||||
end;
|
||||
A_STH:
|
||||
begin
|
||||
counterpart := A_LDUH;
|
||||
end;
|
||||
A_ST :
|
||||
begin
|
||||
counterpart := A_LD;
|
||||
wasload := false;
|
||||
end;
|
||||
A_STD:
|
||||
begin
|
||||
counterpart := A_LDD;
|
||||
wasload := false;
|
||||
end;
|
||||
A_LDF:
|
||||
begin
|
||||
counterpart := A_STF;
|
||||
wasload := false;
|
||||
end;
|
||||
A_LDDF:
|
||||
begin
|
||||
counterpart := A_STDF;
|
||||
wasload := false;
|
||||
end;
|
||||
A_STF:
|
||||
begin
|
||||
counterpart := A_LDF;
|
||||
wasload := false;
|
||||
end;
|
||||
A_STDF:
|
||||
begin
|
||||
counterpart := A_LDDF;
|
||||
wasload := false;
|
||||
end;
|
||||
else
|
||||
result := false;
|
||||
end;
|
||||
@ -297,7 +335,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.35 2003-10-24 07:00:17 mazen
|
||||
Revision 1.36 2003-10-30 15:03:18 mazen
|
||||
* now uses standard routines in rgHelper unit to search registers by number and by name
|
||||
|
||||
Revision 1.35 2003/10/24 07:00:17 mazen
|
||||
* fixed compil problem when using ObjFpc mode (^ required).
|
||||
|
||||
Revision 1.34 2003/10/01 20:34:49 peter
|
||||
|
||||
@ -469,27 +469,27 @@ type
|
||||
procedure inverse_flags(var f: TResFlags);
|
||||
function flags_to_cond(const f: TResFlags) : TAsmCond;
|
||||
function cgsize2subreg(s:Tcgsize):Tsubregister;
|
||||
function findreg_by_number(r:Tregister):tregisterindex;
|
||||
function std_regnum_search(const s:string):Tregister;
|
||||
function std_regname(r:Tregister):string;
|
||||
function gas_regname(r:Tregister):string;
|
||||
function std_regnum_search(const s:string):Tregister;
|
||||
function findreg_by_number(r:Tregister):tregisterindex;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
verbose;
|
||||
|
||||
rgHelper,verbose;
|
||||
|
||||
const
|
||||
std_regname_table : array[tregisterindex] of string[7] = (
|
||||
std_regname_table : TRegNameTAble = (
|
||||
{$i rspstd.inc}
|
||||
);
|
||||
|
||||
regnumber_index : array[tregisterindex] of tregisterindex = (
|
||||
regnumber_index : TRegisterIndexTable = (
|
||||
{$i rsprni.inc}
|
||||
);
|
||||
|
||||
std_regname_index : array[tregisterindex] of tregisterindex = (
|
||||
std_regname_index : TRegisterIndexTable = (
|
||||
{$i rspsri.inc}
|
||||
);
|
||||
|
||||
@ -530,55 +530,11 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function findreg_by_stdname(const s:string):byte;
|
||||
var
|
||||
i,p : tregisterindex;
|
||||
begin
|
||||
{Binary search.}
|
||||
p:=0;
|
||||
i:=regnumber_count_bsstart;
|
||||
repeat
|
||||
if (p+i<=high(tregisterindex)) and (std_regname_table[std_regname_index[p+i]]<=s) then
|
||||
p:=p+i;
|
||||
i:=i shr 1;
|
||||
until i=0;
|
||||
if std_regname_table[std_regname_index[p]]=s then
|
||||
result:=std_regname_index[p]
|
||||
else
|
||||
result:=0;
|
||||
end;
|
||||
|
||||
|
||||
function findreg_by_number(r:Tregister):tregisterindex;
|
||||
var
|
||||
i,p : tregisterindex;
|
||||
begin
|
||||
{Binary search.}
|
||||
p:=0;
|
||||
i:=regnumber_count_bsstart;
|
||||
repeat
|
||||
if (p+i<=high(tregisterindex)) and (regnumber_table[regnumber_index[p+i]]<=r) then
|
||||
p:=p+i;
|
||||
i:=i shr 1;
|
||||
until i=0;
|
||||
if regnumber_table[regnumber_index[p]]=r then
|
||||
result:=regnumber_index[p]
|
||||
else
|
||||
result:=0;
|
||||
end;
|
||||
|
||||
|
||||
function std_regnum_search(const s:string):Tregister;
|
||||
begin
|
||||
result:=regnumber_table[findreg_by_stdname(s)];
|
||||
end;
|
||||
|
||||
|
||||
function std_regname(r:Tregister):string;
|
||||
var
|
||||
p : tregisterindex;
|
||||
begin
|
||||
p:=findreg_by_number(r);
|
||||
p:=rgHelper.findreg_by_number(r,regnumber_index);
|
||||
if p<>0 then
|
||||
result:=std_regname_table[p]
|
||||
else
|
||||
@ -586,11 +542,23 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function std_regnum_search(const s:string):Tregister;
|
||||
begin
|
||||
result:=regnumber_table[findreg_by_name(s,std_regname_table,std_regname_index)];
|
||||
end;
|
||||
|
||||
|
||||
function findreg_by_number(r:Tregister):tregisterindex;
|
||||
begin
|
||||
rgHelper.findreg_by_number(r,regnumber_index);
|
||||
end;
|
||||
|
||||
|
||||
function gas_regname(r:Tregister):string;
|
||||
var
|
||||
p : tregisterindex;
|
||||
begin
|
||||
p:=findreg_by_number(r);
|
||||
p:=rgHelper.findreg_by_number(r,regnumber_index);
|
||||
if p<>0 then
|
||||
result:=std_regname_table[p]
|
||||
else
|
||||
@ -600,7 +568,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.53 2003-10-08 14:11:36 mazen
|
||||
Revision 1.54 2003-10-30 15:03:18 mazen
|
||||
* now uses standard routines in rgHelper unit to search registers by number and by name
|
||||
|
||||
Revision 1.53 2003/10/08 14:11:36 mazen
|
||||
+ Alignement field added to TParaLocation (=4 as 32 bits archs)
|
||||
|
||||
Revision 1.52 2003/10/01 20:34:50 peter
|
||||
|
||||
@ -371,7 +371,7 @@ uses
|
||||
implementation
|
||||
|
||||
uses
|
||||
verbose;
|
||||
rgHelper,verbose;
|
||||
|
||||
const
|
||||
{$ifdef x86_64}
|
||||
@ -500,47 +500,15 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function findreg_by_stdname(const s:string):byte;
|
||||
var
|
||||
i,p : tregisterindex;
|
||||
begin
|
||||
{Binary search.}
|
||||
p:=0;
|
||||
i:=regnumber_count_bsstart;
|
||||
repeat
|
||||
if (p+i<=high(tregisterindex)) and (std_regname_table[std_regname_index[p+i]]<=s) then
|
||||
p:=p+i;
|
||||
i:=i shr 1;
|
||||
until i=0;
|
||||
if std_regname_table[std_regname_index[p]]=s then
|
||||
result:=std_regname_index[p]
|
||||
else
|
||||
result:=0;
|
||||
end;
|
||||
|
||||
|
||||
function findreg_by_number(r:Tregister):tregisterindex;
|
||||
var
|
||||
i,p : tregisterindex;
|
||||
begin
|
||||
{Binary search.}
|
||||
p:=0;
|
||||
i:=regnumber_count_bsstart;
|
||||
repeat
|
||||
if (p+i<=high(tregisterindex)) and (regnumber_table[regnumber_index[p+i]]<=r) then
|
||||
p:=p+i;
|
||||
i:=i shr 1;
|
||||
until i=0;
|
||||
if regnumber_table[regnumber_index[p]]=r then
|
||||
result:=regnumber_index[p]
|
||||
else
|
||||
result:=0;
|
||||
rgHelper.findreg_by_number(r,regnumber_index);
|
||||
end;
|
||||
|
||||
|
||||
function std_regnum_search(const s:string):Tregister;
|
||||
begin
|
||||
result:=regnumber_table[findreg_by_stdname(s)];
|
||||
result:=regnumber_table[findreg_by_name(s,std_regname_table,std_regname_index)];
|
||||
end;
|
||||
|
||||
|
||||
@ -558,7 +526,10 @@ implementation
|
||||
end.
|
||||
{
|
||||
$Log$
|
||||
Revision 1.27 2003-10-17 15:08:34 peter
|
||||
Revision 1.28 2003-10-30 15:03:18 mazen
|
||||
* now uses standard routines in rgHelper unit to search registers by number and by name
|
||||
|
||||
Revision 1.27 2003/10/17 15:08:34 peter
|
||||
* commented out more obsolete constants
|
||||
|
||||
Revision 1.26 2003/10/17 14:38:32 peter
|
||||
|
||||
Loading…
Reference in New Issue
Block a user