2
0

rgbase.pas 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. {
  2. $Id$
  3. Copyright (c) 1998-2002 by Florian Klaempfl
  4. Helper routines for register allocator
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 2 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program; if not, write to the Free Software
  15. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16. ****************************************************************************
  17. }
  18. unit rgbase;
  19. {$i fpcdefs.inc}
  20. interface
  21. uses
  22. cpuBase,cgBase;
  23. type
  24. TRegNameTable = array[tregisterindex] of string[7];
  25. TRegisterIndexTable = array[tregisterindex] of tregisterindex;
  26. function findreg_by_number_table(r:Tregister;const regnumber_index:TRegisterIndexTable):tregisterindex;
  27. function findreg_by_name_table(const s:string;const regname_table:TRegNameTable;const regname_index:TRegisterIndexTable):byte;
  28. implementation
  29. function findreg_by_name_table(const s:string;const regname_table:TRegNameTable;const regname_index:TRegisterIndexTable):byte;
  30. var
  31. i,p,q : tregisterindex;
  32. begin
  33. p:=Low(tregisterindex);
  34. q:=high(tregisterindex);
  35. repeat
  36. i:=(p+q) shr 1;
  37. if s>regname_table[regname_index[i]] then
  38. p:=i+1
  39. else
  40. q:=i;
  41. until p=q;
  42. if regname_table[regname_index[p]]=s then
  43. result:=regname_index[p]
  44. else
  45. result:=0;
  46. end;
  47. function findreg_by_number_table(r:Tregister;const regnumber_index:TRegisterIndexTable):tregisterindex;
  48. var
  49. i,p,q : tregisterindex;
  50. begin
  51. p:=Low(tregisterindex);
  52. q:=high(tregisterindex);
  53. repeat
  54. i:=(p+q) shr 1;
  55. if r>regnumber_table[regnumber_index[i]] then
  56. p:=i+1
  57. else
  58. q:=i;
  59. until p=q;
  60. if regnumber_table[regnumber_index[p]]=r then
  61. result:=regnumber_index[p]
  62. else
  63. result:=0;
  64. end;
  65. end.
  66. {
  67. $Log$
  68. Revision 1.1 2003-10-30 17:13:18 peter
  69. * fixed findreg_by_number
  70. * renamed rghelper to rgbase
  71. }