opcode.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. * Copyright (c) 2006-2025 RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-11-09 Shell Add portable asm support
  9. */
  10. #ifndef __OPCODE_H__
  11. #define __OPCODE_H__
  12. /**
  13. * @brief binary opcode pseudo operations
  14. * Used to bypass toolchain restriction on extension ISA
  15. *
  16. */
  17. /**
  18. * @brief RISC-V instruction formats
  19. */
  20. /**
  21. * R type: .insn r opcode6, func3, func7, rd, rs1, rs2
  22. *
  23. * +-------+-----+-----+-------+----+---------+
  24. * | func7 | rs2 | rs1 | func3 | rd | opcode6 |
  25. * +-------+-----+-----+-------+----+---------+
  26. * 31 25 20 15 12 7 0
  27. */
  28. #define __OPC_INSN_FORMAT_R(opcode, func3, func7, rd, rs1, rs2) \
  29. ".insn r "RT_STRINGIFY(opcode)","RT_STRINGIFY(func3)","RT_STRINGIFY(func7)","RT_STRINGIFY(rd)","RT_STRINGIFY(rs1)","RT_STRINGIFY(rs2)
  30. #ifdef _TOOLCHAIN_SUPP_ZIFENCEI_ISA_
  31. #define OPC_FENCE_I "fence.i"
  32. #else /* !_TOOLCHAIN_SUPP_ZIFENCEI_ISA_ */
  33. #define OPC_FENCE_I ".long 0x0000100F"
  34. #endif /* _TOOLCHAIN_SUPP_ZIFENCEI_ISA_ */
  35. #endif /* __OPCODE_H__ */