macros.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /************************************************************************
  2. *
  3. * macros.h
  4. *
  5. * (c) Copyright 2001-2003 Analog Devices, Inc. All rights reserved.
  6. *
  7. ************************************************************************/
  8. /* Defines various assembly macros. */
  9. #ifndef _MACROS_H
  10. #define _MACROS_H
  11. #define LO(con32) ((con32) & 0xFFFF)
  12. #define lo(con32) ((con32) & 0xFFFF)
  13. #define HI(con32) (((con32) >> 16) & 0xFFFF)
  14. #define hi(con32) (((con32) >> 16) & 0xFFFF)
  15. /*
  16. * Set the corresponding bits in a System Register (SR);
  17. * All bits set in "mask" will be set in the system register
  18. * specified by "sys_reg" bitset_SR(sys_reg, mask), where
  19. * sys_reg is the system register and mask are the bits to be set.
  20. */
  21. #define bitset_SR(sys_reg, mask)\
  22. [--SP] = (R7:6);\
  23. r7 = sys_reg;\
  24. r6.l = (mask) & 0xffff;\
  25. r6.h = (mask) >> 16;\
  26. r7 = r7 | r6;\
  27. sys_reg = r7;\
  28. csync;\
  29. (R7:6) = [SP++]
  30. /*
  31. * Clear the corresponding bits in a System Register (SR);
  32. * All bits set in "mask" will be cleared in the SR
  33. * specified by "sys_reg" bitclr_SR(sys_reg, mask), where
  34. * sys_reg is the SR and mask are the bits to be cleared.
  35. */
  36. #define bitclr_SR(sys_reg, mask)\
  37. [--SP] = (R7:6);\
  38. r7 = sys_reg;\
  39. r7 =~ r7;\
  40. r6.l = (mask) & 0xffff;\
  41. r6.h = (mask) >> 16;\
  42. r7 = r7 | r6;\
  43. r7 =~ r7;\
  44. sys_reg = r7;\
  45. csync;\
  46. (R7:6) = [SP++]
  47. /*
  48. * Set the corresponding bits in a Memory Mapped Register (MMR);
  49. * All bits set in "mask" will be set in the MMR specified by "mmr_reg"
  50. * bitset_MMR(mmr_reg, mask), where mmr_reg is the MMR and mask are
  51. * the bits to be set.
  52. */
  53. #define bitset_MMR(mmr_reg, mask)\
  54. [--SP] = (R7:6);\
  55. [--SP] = P5;\
  56. p5.l = mmr_reg & 0xffff;\
  57. p5.h = mmr_reg >> 16;\
  58. r7 = [p5];\
  59. r6.l = (mask) & 0xffff;\
  60. r6.h = (mask) >> 16;\
  61. r7 = r7 | r6;\
  62. [p5] = r7;\
  63. csync;\
  64. p5 = [SP++];\
  65. (R7:6) = [SP++]
  66. /*
  67. * Clear the corresponding bits in a Memory Mapped Register (MMR);
  68. * All bits set in "mask" will be cleared in the MMR specified by "mmr_reg"
  69. * bitclr_MMRreg(mmr_reg, mask), where sys_reg is the MMR and mask are
  70. * the bits to be cleared.
  71. */
  72. #define bitclr_MMR(mmr_reg, mask)\
  73. [--SP] = (R7:6);\
  74. [--SP] = P5;\
  75. p5.l = mmr_reg & 0xffff;\
  76. p5.h = mmr_reg >> 16;\
  77. r7 = [p5];\
  78. r7 =~ r7;\
  79. r6.l = (mask) & 0xffff;\
  80. r6.h = (mask) >> 16;\
  81. r7 = r7 | r6;\
  82. r7 =~ r7;\
  83. [p5] = r7;\
  84. csync;\
  85. p5 = [SP++];\
  86. (R7:6) = [SP++]
  87. #endif /* _MACROS_H */