sme-inst.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. // Copyright (C) 2021-2 ARM Limited.
  3. // Original author: Mark Brown <broonie@kernel.org>
  4. #ifndef SME_INST_H
  5. #define SME_INST_H
  6. /*
  7. * RDSVL X\nx, #\imm
  8. */
  9. .macro rdsvl nx, imm
  10. .inst 0x4bf5800 \
  11. | (\imm << 5) \
  12. | (\nx)
  13. .endm
  14. .macro smstop
  15. msr S0_3_C4_C6_3, xzr
  16. .endm
  17. .macro smstart_za
  18. msr S0_3_C4_C5_3, xzr
  19. .endm
  20. .macro smstart_sm
  21. msr S0_3_C4_C3_3, xzr
  22. .endm
  23. /*
  24. * LDR (vector to ZA array):
  25. * LDR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
  26. */
  27. .macro _ldr_za nw, nxbase, offset=0
  28. .inst 0xe1000000 \
  29. | (((\nw) & 3) << 13) \
  30. | ((\nxbase) << 5) \
  31. | ((\offset) & 7)
  32. .endm
  33. /*
  34. * STR (vector from ZA array):
  35. * STR ZA[\nw, #\offset], [X\nxbase, #\offset, MUL VL]
  36. */
  37. .macro _str_za nw, nxbase, offset=0
  38. .inst 0xe1200000 \
  39. | (((\nw) & 3) << 13) \
  40. | ((\nxbase) << 5) \
  41. | ((\offset) & 7)
  42. .endm
  43. /*
  44. * LDR (ZT0)
  45. *
  46. * LDR ZT0, nx
  47. */
  48. .macro _ldr_zt nx
  49. .inst 0xe11f8000 \
  50. | (((\nx) & 0x1f) << 5)
  51. .endm
  52. /*
  53. * STR (ZT0)
  54. *
  55. * STR ZT0, nx
  56. */
  57. .macro _str_zt nx
  58. .inst 0xe13f8000 \
  59. | (((\nx) & 0x1f) << 5)
  60. .endm
  61. #endif