sme-inst.h 880 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. // Copyright (C) 2021-2 ARM Limited.
  3. // Original author: Mark Brown <[email protected]>
  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. #endif