|
@@ -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,59 +530,27 @@ 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;
|
|
|
+ function std_regname(r:Tregister):string;
|
|
|
var
|
|
|
- i,p : tregisterindex;
|
|
|
+ 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]
|
|
|
+ p:=rgHelper.findreg_by_number(r,regnumber_index);
|
|
|
+ if p<>0 then
|
|
|
+ result:=std_regname_table[p]
|
|
|
else
|
|
|
- result:=0;
|
|
|
+ result:=generic_regname(r);
|
|
|
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;
|
|
|
|
|
|
|
|
|
- function std_regname(r:Tregister):string;
|
|
|
- var
|
|
|
- p : tregisterindex;
|
|
|
+ function findreg_by_number(r:Tregister):tregisterindex;
|
|
|
begin
|
|
|
- p:=findreg_by_number(r);
|
|
|
- if p<>0 then
|
|
|
- result:=std_regname_table[p]
|
|
|
- else
|
|
|
- result:=generic_regname(r);
|
|
|
+ rgHelper.findreg_by_number(r,regnumber_index);
|
|
|
end;
|
|
|
|
|
|
|
|
@@ -590,7 +558,7 @@ implementation
|
|
|
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
|