riscv64.M1 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. ## Copyright (C) 2021 Andrius Štikonas
  2. ## This file is part of M2-Planet.
  3. ##
  4. ## M2-Planet is free software: you can redistribute it and/or modify
  5. ## it under the terms of the GNU General Public License as published by
  6. ## the Free Software Foundation, either version 3 of the License, or
  7. ## (at your option) any later version.
  8. ##
  9. ## M2-Planet is distributed in the hope that it will be useful,
  10. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. ## GNU General Public License for more details.
  13. ##
  14. ## You should have received a copy of the GNU General Public License
  15. ## along with M2-Planet. If not, see <http://www.gnu.org/licenses/>.
  16. DEFINE NULL 0000000000000000
  17. ;; Opcodes
  18. ;; RV32I Base Instruction Set
  19. DEFINE LUI 37000000
  20. DEFINE AUIPC 17000000
  21. DEFINE JAL 6F000000
  22. DEFINE JALR 67000000
  23. DEFINE BEQ 63000000
  24. DEFINE BNE 63100000
  25. DEFINE BLT 63400000
  26. DEFINE BGE 63500000
  27. DEFINE BLTU 63600000
  28. DEFINE BGEU 63700000
  29. DEFINE LB 03000000
  30. DEFINE LH 03100000
  31. DEFINE LW 03200000
  32. DEFINE LBU 03400000
  33. DEFINE LHU 03500000
  34. DEFINE SB 23000000
  35. DEFINE SH 23100000
  36. DEFINE SW 23200000
  37. DEFINE ADDI 13000000
  38. DEFINE SLTI 13200000
  39. DEFINE SLTIU 13300000
  40. DEFINE XORI 13400000
  41. DEFINE ORI 13600000
  42. DEFINE ANDI 13700000
  43. DEFINE SLLI 13100000
  44. DEFINE SRLI 13500000
  45. DEFINE SRAI 13500040
  46. DEFINE ADD 33000000
  47. DEFINE SUB 33000040
  48. DEFINE SLL 33100000
  49. DEFINE SLT 33200000
  50. DEFINE SLTU 33300000
  51. DEFINE XOR 33400000
  52. DEFINE SRL 33500000
  53. DEFINE SRA 33500040
  54. DEFINE OR 33600000
  55. DEFINE AND 33700000
  56. DEFINE ECALL 73000000
  57. ;; RV64I Base Instruction set
  58. DEFINE LWU 03600000
  59. DEFINE LD 03300000
  60. DEFINE SD 23300000
  61. DEFINE ADDIW 1B000000
  62. DEFINE SLLIW 1B100000
  63. DEFINE SRLIW 1B500000
  64. DEFINE SRAIW 1B500040
  65. DEFINE ADDW 3B000000
  66. DEFINE SUBW 3B000040
  67. DEFINE SLLW 3B100000
  68. DEFINE SRLW 3B500000
  69. DEFINE SRAW 3B500040
  70. ;; RV32M Standard Extensions
  71. DEFINE MUL 33000002
  72. DEFINE MULH 33100002
  73. DEFINE MULHSU 33200002
  74. DEFINE MULHU 33300002
  75. DEFINE DIV 33400002
  76. DEFINE DIVU 33500002
  77. DEFINE REM 33600002
  78. DEFINE REMU 33700002
  79. ;; RV64M Standard Extensions
  80. DEFINE MULW 3B000002
  81. DEFINE DIVW 3B400002
  82. DEFINE DIVUW 3B500002
  83. DEFINE REMW 3B600002
  84. DEFINE REMUW 3B700002
  85. ;; Pseudoinstructions
  86. DEFINE NOP 13000000 # ADDI
  87. DEFINE MV 13000000 # ADDI
  88. DEFINE NOT 1340F0FF # XORI, RD, RS, -1
  89. DEFINE BEQZ 63000000 # BEQ
  90. DEFINE BNEZ 63100000 # BNE
  91. DEFINE BLTZ 63400000 # BLT
  92. DEFINE RETURN 67800000 # RS1_RA JALR
  93. ;; Destination registers
  94. ;; register_number << 7
  95. DEFINE RD_RA .80000000
  96. DEFINE RD_SP .00010000
  97. DEFINE RD_GP .80010000
  98. DEFINE RD_TP .00020000
  99. DEFINE RD_T0 .80020000
  100. DEFINE RD_T1 .00030000
  101. DEFINE RD_T2 .80030000
  102. DEFINE RD_S0 .00040000
  103. DEFINE RD_FP .00040000
  104. DEFINE RD_S1 .80040000
  105. DEFINE RD_A0 .00050000
  106. DEFINE RD_A1 .80050000
  107. DEFINE RD_A2 .00060000
  108. DEFINE RD_A3 .80060000
  109. DEFINE RD_A4 .00070000
  110. DEFINE RD_A5 .80070000
  111. DEFINE RD_A6 .00080000
  112. DEFINE RD_A7 .80080000
  113. DEFINE RD_S2 .00090000
  114. DEFINE RD_S3 .80090000
  115. DEFINE RD_S4 .000A0000
  116. DEFINE RD_S5 .800A0000
  117. DEFINE RD_S6 .000B0000
  118. DEFINE RD_S7 .800B0000
  119. DEFINE RD_S8 .000C0000
  120. DEFINE RD_S9 .800C0000
  121. DEFINE RD_S10 .000D0000
  122. DEFINE RD_S11 .800D0000
  123. DEFINE RD_T3 .000E0000
  124. DEFINE RD_T4 .800E0000
  125. DEFINE RD_T5 .000F0000
  126. DEFINE RD_T6 .800F0000
  127. ;; First source registers
  128. ;; register_number << 15
  129. DEFINE RS1_RA .00800000
  130. DEFINE RS1_SP .00000100
  131. DEFINE RS1_GP .00800100
  132. DEFINE RS1_TP .00000200
  133. DEFINE RS1_T0 .00800200
  134. DEFINE RS1_T1 .00000300
  135. DEFINE RS1_T2 .00800300
  136. DEFINE RS1_S0 .00000400
  137. DEFINE RS1_FP .00000400
  138. DEFINE RS1_S1 .00800400
  139. DEFINE RS1_A0 .00000500
  140. DEFINE RS1_A1 .00800500
  141. DEFINE RS1_A2 .00000600
  142. DEFINE RS1_A3 .00800600
  143. DEFINE RS1_A4 .00000700
  144. DEFINE RS1_A5 .00800700
  145. DEFINE RS1_A6 .00000800
  146. DEFINE RS1_A7 .00800800
  147. DEFINE RS1_S2 .00000900
  148. DEFINE RS1_S3 .00800900
  149. DEFINE RS1_S4 .00000A00
  150. DEFINE RS1_S5 .00800A00
  151. DEFINE RS1_S6 .00000B00
  152. DEFINE RS1_S7 .00800B00
  153. DEFINE RS1_S8 .00000C00
  154. DEFINE RS1_S9 .00800C00
  155. DEFINE RS1_S10 .00000D00
  156. DEFINE RS1_S11 .00800D00
  157. DEFINE RS1_T3 .00000E00
  158. DEFINE RS1_T4 .00800E00
  159. DEFINE RS1_T5 .00000F00
  160. DEFINE RS1_T6 .00800F00
  161. ;; Second source registers
  162. ;; register_number << 20
  163. DEFINE RS2_RA .00001000
  164. DEFINE RS2_SP .00002000
  165. DEFINE RS2_GP .00003000
  166. DEFINE RS2_TP .00004000
  167. DEFINE RS2_T0 .00005000
  168. DEFINE RS2_T1 .00006000
  169. DEFINE RS2_T2 .00007000
  170. DEFINE RS2_S0 .00008000
  171. DEFINE RS2_FP .00008000
  172. DEFINE RS2_S1 .00009000
  173. DEFINE RS2_A0 .0000A000
  174. DEFINE RS2_A1 .0000B000
  175. DEFINE RS2_A2 .0000C000
  176. DEFINE RS2_A3 .0000D000
  177. DEFINE RS2_A4 .0000E000
  178. DEFINE RS2_A5 .0000F000
  179. DEFINE RS2_A6 .00000001
  180. DEFINE RS2_A7 .00001001
  181. DEFINE RS2_S2 .00002001
  182. DEFINE RS2_S3 .00003001
  183. DEFINE RS2_S4 .00004001
  184. DEFINE RS2_S5 .00005001
  185. DEFINE RS2_S6 .00006001
  186. DEFINE RS2_S7 .00007001
  187. DEFINE RS2_S8 .00008001
  188. DEFINE RS2_S9 .00009001
  189. DEFINE RS2_S10 .0000A001
  190. DEFINE RS2_S11 .0000B001
  191. DEFINE RS2_T3 .0000C001
  192. DEFINE RS2_T4 .0000D001
  193. DEFINE RS2_T5 .0000E001
  194. DEFINE RS2_T6 .0000F001
  195. DEFINE RS2_X0 .00000000
  196. DEFINE RS2_X1 .00001000
  197. DEFINE RS2_X2 .00002000
  198. DEFINE RS2_X3 .00003000
  199. DEFINE RS2_X4 .00004000
  200. DEFINE RS2_X5 .00005000
  201. DEFINE RS2_X6 .00006000
  202. DEFINE RS2_X7 .00007000
  203. DEFINE RS2_X8 .00008000
  204. DEFINE RS2_X9 .00009000
  205. DEFINE RS2_X10 .0000A000
  206. DEFINE RS2_X11 .0000B000
  207. DEFINE RS2_X12 .0000C000
  208. DEFINE RS2_X13 .0000D000
  209. DEFINE RS2_X14 .0000E000
  210. DEFINE RS2_X15 .0000F000
  211. DEFINE RS2_X16 .00000001
  212. DEFINE RS2_X17 .00001001
  213. DEFINE RS2_X18 .00002001
  214. DEFINE RS2_X19 .00003001
  215. DEFINE RS2_X20 .00004001
  216. DEFINE RS2_X21 .00005001
  217. DEFINE RS2_X22 .00006001
  218. DEFINE RS2_X23 .00007001
  219. DEFINE RS2_X24 .00008001
  220. DEFINE RS2_X25 .00009001
  221. DEFINE RS2_X26 .0000A001
  222. DEFINE RS2_X27 .0000B001
  223. DEFINE RS2_X28 .0000C001
  224. DEFINE RS2_X29 .0000D001
  225. DEFINE RS2_X30 .0000E001
  226. DEFINE RS2_X31 .0000F001