* now uses standard routines in rgHelper unit to search registers by number and by name

This commit is contained in:
mazen 2003-10-30 15:02:04 +00:00
parent bb42874171
commit 75f88a5b90
5 changed files with 88 additions and 164 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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