rgcpu.pas 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. {******************************************************************************
  2. $Id$
  3. Copyright (c) 1998-2002 by Florian Klaempfl
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program; if not, write to the Free Software
  14. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  15. ****************************************************************************}
  16. unit rgcpu;
  17. { This unit implements the processor specific class for the register allocator}
  18. {$INCLUDE fpcdefs.inc}
  19. interface
  20. uses
  21. cpubase,
  22. cpuinfo,
  23. aasmcpu,
  24. aasmtai,
  25. cclasses,globtype,cgbase,aasmbase,rgobj;
  26. type
  27. {This class implements the cpu spaecific register allocator. It is used by the
  28. code generator to allocate and free registers which might be valid across
  29. nodes. It also contains utility routines related to registers. Some of the
  30. methods in this class overrides generic implementations in rgobj.pas.}
  31. trgcpu=class(trgobj)
  32. function GetExplicitRegisterInt(list:taasmoutput;Reg:tregister):tregister;override;
  33. procedure UngetregisterInt(list:taasmoutput;Reg:tregister);override;
  34. end;
  35. implementation
  36. uses
  37. cgobj;
  38. function trgcpu.GetExplicitRegisterInt(list:taasmoutput;reg:tregister):tregister;
  39. begin
  40. if reg in [R_O7,R_I7]
  41. then
  42. begin
  43. cg.a_reg_alloc(list,Reg);
  44. result := Reg;
  45. end
  46. else result := inherited GetExplicitRegisterInt(list,reg);
  47. end;
  48. procedure trgcpu.UngetregisterInt(list: taasmoutput; reg: tregister);
  49. begin
  50. if reg in [R_O7,R_I7]
  51. then
  52. cg.a_reg_dealloc(list,reg)
  53. else
  54. inherited ungetregisterint(list,reg);
  55. end;
  56. initialization
  57. rg := trgcpu.create;
  58. end.
  59. {
  60. $Log$
  61. Revision 1.4 2002-10-13 21:46:07 mazen
  62. * assembler output format fixed
  63. Revision 1.3 2002/10/12 19:03:23 mazen
  64. * Get/Unget expilit registers to be re-examined
  65. }