asm.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * (C) Copyright 2007 Michal Simek
  4. *
  5. * Michal SIMEK <monstr@monstr.eu>
  6. */
  7. /* FSL macros */
  8. #define NGET(val, fslnum) \
  9. __asm__ __volatile__ ("nget %0, rfsl" #fslnum :"=r" (val));
  10. #define GET(val, fslnum) \
  11. __asm__ __volatile__ ("get %0, rfsl" #fslnum :"=r" (val));
  12. #define NCGET(val, fslnum) \
  13. __asm__ __volatile__ ("ncget %0, rfsl" #fslnum :"=r" (val));
  14. #define CGET(val, fslnum) \
  15. __asm__ __volatile__ ("cget %0, rfsl" #fslnum :"=r" (val));
  16. #define NPUT(val, fslnum) \
  17. __asm__ __volatile__ ("nput %0, rfsl" #fslnum ::"r" (val));
  18. #define PUT(val, fslnum) \
  19. __asm__ __volatile__ ("put %0, rfsl" #fslnum ::"r" (val));
  20. #define NCPUT(val, fslnum) \
  21. __asm__ __volatile__ ("ncput %0, rfsl" #fslnum ::"r" (val));
  22. #define CPUT(val, fslnum) \
  23. __asm__ __volatile__ ("cput %0, rfsl" #fslnum ::"r" (val));
  24. /* CPU dependent */
  25. /* machine status register */
  26. #define MFS(val, reg) \
  27. __asm__ __volatile__ ("mfs %0," #reg :"=r" (val));
  28. #define MTS(val, reg) \
  29. __asm__ __volatile__ ("mts " #reg ", %0"::"r" (val));
  30. /* get return address from interrupt */
  31. #define R14(val) \
  32. __asm__ __volatile__ ("addi %0, r14, 0":"=r" (val));
  33. /* get return address from interrupt */
  34. #define R17(val) \
  35. __asm__ __volatile__ ("addi %0, r17, 0" : "=r" (val));
  36. #define NOP __asm__ __volatile__ ("nop");
  37. /* use machine status registe USE_MSR_REG */
  38. #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 1
  39. #define MSRSET(val) \
  40. __asm__ __volatile__ ("msrset r0," #val );
  41. #define MSRCLR(val) \
  42. __asm__ __volatile__ ("msrclr r0," #val );
  43. #else
  44. #define MSRSET(val) \
  45. { \
  46. register unsigned tmp; \
  47. __asm__ __volatile__ (" \
  48. mfs %0, rmsr; \
  49. ori %0, %0, "#val"; \
  50. mts rmsr, %0; \
  51. nop;" \
  52. : "=r" (tmp) \
  53. : "d" (val) \
  54. : "memory"); \
  55. }
  56. #define MSRCLR(val) \
  57. { \
  58. register unsigned tmp; \
  59. __asm__ __volatile__ (" \
  60. mfs %0, rmsr; \
  61. andi %0, %0, ~"#val"; \
  62. mts rmsr, %0; \
  63. nop;" \
  64. : "=r" (tmp) \
  65. : "d" (val) \
  66. : "memory"); \
  67. }
  68. #endif