* fixed findreg_by_number

* renamed rghelper to rgbase
This commit is contained in:
peter 2003-10-30 17:13:18 +00:00
parent c8300cab51
commit 0bc3453035
2 changed files with 27 additions and 19 deletions

View File

@ -1,8 +1,8 @@
{*****************************************************************************}
{ {
$Id$ $Id$
This file is part of the Free Pascal's "Free Components Library". Copyright (c) 1998-2002 by Florian Klaempfl
Copyright (c) 2003 by Mazen NEIFER of the Free Pascal development team
Helper routines for register allocator
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -17,9 +17,10 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
****************************************************************************
} }
{*****************************************************************************} unit rgbase;
unit rgHelper;
{$i fpcdefs.inc} {$i fpcdefs.inc}
@ -32,24 +33,25 @@ interface
TRegNameTable = array[tregisterindex] of string[7]; TRegNameTable = array[tregisterindex] of string[7];
TRegisterIndexTable = array[tregisterindex] of tregisterindex; TRegisterIndexTable = array[tregisterindex] of tregisterindex;
function findreg_by_number(r:Tregister;const regnumber_index:TRegisterIndexTable):tregisterindex; function findreg_by_number_table(r:Tregister;const regnumber_index:TRegisterIndexTable):tregisterindex;
function findreg_by_name(const s:string;const regname_table:TRegNameTable;const regname_index:TRegisterIndexTable):byte; function findreg_by_name_table(const s:string;const regname_table:TRegNameTable;const regname_index:TRegisterIndexTable):byte;
implementation implementation
function findreg_by_name(const s:string;const regname_table:TRegNameTable;const regname_index:TRegisterIndexTable):byte; function findreg_by_name_table(const s:string;const regname_table:TRegNameTable;const regname_index:TRegisterIndexTable):byte;
var var
i,p,q : tregisterindex; i,p,q : tregisterindex;
begin begin
p:=Low(tregisterindex); p:=Low(tregisterindex);
q:=high(tregisterindex); q:=high(tregisterindex);
repeat repeat
i:=(p+q)shr 1; i:=(p+q) shr 1;
if regname_table[regname_index[i]]<=s then if s>regname_table[regname_index[i]] then
p:=i+1 p:=i+1
else else
q:=i; q:=i;
until i=0; until p=q;
if regname_table[regname_index[p]]=s then if regname_table[regname_index[p]]=s then
result:=regname_index[p] result:=regname_index[p]
else else
@ -57,14 +59,14 @@ implementation
end; end;
function findreg_by_number(r:Tregister;const regnumber_index:TRegisterIndexTable):tregisterindex; function findreg_by_number_table(r:Tregister;const regnumber_index:TRegisterIndexTable):tregisterindex;
var var
i,p,q : tregisterindex; i,p,q : tregisterindex;
begin begin
p:=Low(tregisterindex); p:=Low(tregisterindex);
q:=high(tregisterindex); q:=high(tregisterindex);
repeat repeat
i:=(p+q)shr 1; i:=(p+q) shr 1;
if r>regnumber_table[regnumber_index[i]] then if r>regnumber_table[regnumber_index[i]] then
p:=i+1 p:=i+1
else else
@ -75,10 +77,12 @@ implementation
else else
result:=0; result:=0;
end; end;
end. end.
{ {
$Log$ $Log$
Revision 1.2 2003-10-30 15:02:27 mazen Revision 1.1 2003-10-30 17:13:18 peter
*** empty log message *** * fixed findreg_by_number
* renamed rghelper to rgbase
} }

View File

@ -371,7 +371,7 @@ uses
implementation implementation
uses uses
rgHelper,verbose; rgbase,verbose;
const const
{$ifdef x86_64} {$ifdef x86_64}
@ -502,13 +502,13 @@ implementation
function findreg_by_number(r:Tregister):tregisterindex; function findreg_by_number(r:Tregister):tregisterindex;
begin begin
rgHelper.findreg_by_number(r,regnumber_index); result:=findreg_by_number_table(r,regnumber_index);
end; end;
function std_regnum_search(const s:string):Tregister; function std_regnum_search(const s:string):Tregister;
begin begin
result:=regnumber_table[findreg_by_name(s,std_regname_table,std_regname_index)]; result:=regnumber_table[findreg_by_name_table(s,std_regname_table,std_regname_index)];
end; end;
@ -526,7 +526,11 @@ implementation
end. end.
{ {
$Log$ $Log$
Revision 1.28 2003-10-30 15:03:18 mazen Revision 1.29 2003-10-30 17:13:18 peter
* fixed findreg_by_number
* renamed rghelper to rgbase
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 * 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 Revision 1.27 2003/10/17 15:08:34 peter