asm.h 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. /* get return address from interrupt */
  35. #define R17(val) \
  36. __asm__ __volatile__ ("addi %0, r17, 0" : "=r" (val));
  37. #define NOP __asm__ __volatile__ ("nop");
  38. /* use machine status registe USE_MSR_REG */
  39. #if CONFIG_XILINX_MICROBLAZE0_USE_MSR_INSTR == 1
  40. #define MSRSET(val) \
  41. __asm__ __volatile__ ("msrset r0," #val );
  42. #define MSRCLR(val) \
  43. __asm__ __volatile__ ("msrclr r0," #val );
  44. #else
  45. #define MSRSET(val) \
  46. { \
  47. register unsigned tmp; \
  48. __asm__ __volatile__ (" \
  49. mfs %0, rmsr; \
  50. ori %0, %0, "#val"; \
  51. mts rmsr, %0; \
  52. nop;" \
  53. : "=r" (tmp) \
  54. : "d" (val) \
  55. : "memory"); \
  56. }
  57. #define MSRCLR(val) \
  58. { \
  59. register unsigned tmp; \
  60. __asm__ __volatile__ (" \
  61. mfs %0, rmsr; \
  62. andi %0, %0, ~"#val"; \
  63. mts rmsr, %0; \
  64. nop;" \
  65. : "=r" (tmp) \
  66. : "d" (val) \
  67. : "memory"); \
  68. }
  69. #endif