Reg.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. #define RA_DONTALLOCATE 0x1
  7. #define RA_CALLEESAVE 0x2
  8. #define RA_CALLERSAVE 0x4
  9. #define RA_BYTEABLE 0x8
  10. enum RegNum {
  11. #define REGDAT(Name, Listing, Encode, Type, BitVec) Reg ## Name,
  12. #include "RegList.h"
  13. RegNumCount,
  14. // alias RegArg0, RegArg1, ...
  15. #define REG_INT_ARG(Index, Name) RegArg ## Index = Reg ## Name,
  16. #include "RegList.h"
  17. // alias RegXmmArg0, RegXmmArg1, ...
  18. #define REG_XMM_ARG(Index, Name) RegXmmArg ## Index = Reg ## Name,
  19. #include "RegList.h"
  20. };
  21. // IntArgRegsCount
  22. enum _IntArgRegs {
  23. #define REG_INT_ARG(Index, Name) _RegArg ## Index,
  24. #include "RegList.h"
  25. IntArgRegsCount
  26. };
  27. // XmmArgRegsCount
  28. enum _XmmArgRegs {
  29. #define REG_XMM_ARG(Index, Name) _RegXmmArg ## Index,
  30. #include "RegList.h"
  31. XmmArgRegsCount
  32. };
  33. #define REGNUM_ISXMMXREG(r) ((r) >= RegXMM0 && (r) <= RegXMM15)
  34. #define FIRST_XMM_REG RegXMM0
  35. #define FIRST_FLOAT_REG RegXMM0
  36. #define FIRST_FLOAT_ARG_REG RegXMM0
  37. #define XMM_REGCOUNT 16
  38. #define FOREACH_REG(reg) \
  39. for (RegNum reg = (RegNum)(RegNOREG+1); reg != RegNumCount; reg = (RegNum)(reg+1))
  40. #define NEXT_REG
  41. #define FOREACH_INT_REG(reg) \
  42. for (RegNum reg = (RegNum)(RegNOREG+1); reg != FIRST_FLOAT_REG; reg = (RegNum)(reg+1))
  43. #define NEXT_INT_REG
  44. #define FOREACH_FLOAT_REG(reg) \
  45. for (RegNum reg = FIRST_FLOAT_REG; reg != RegNumCount; reg = (RegNum)(reg+1))
  46. #define NEXT_FLOAT_REG