asm.h 1.9 KB

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