udb 0.1.14 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. checksums.yaml +4 -4
  2. data/.data/cfgs/example_rv64_with_overlay.yaml +6 -6
  3. data/.data/cfgs/mc100-32-full-example.yaml +3 -2
  4. data/.data/cfgs/profile/RVA20S64.yaml +2 -0
  5. data/.data/cfgs/profile/RVA20U64.yaml +2 -0
  6. data/.data/cfgs/profile/RVA22S64.yaml +2 -0
  7. data/.data/cfgs/profile/RVA22U64.yaml +2 -0
  8. data/.data/cfgs/profile/RVA23S64.yaml +2 -0
  9. data/.data/cfgs/profile/RVA23U64.yaml +2 -0
  10. data/.data/cfgs/profile/RVB23S64.yaml +2 -0
  11. data/.data/cfgs/profile/RVB23U64.yaml +2 -0
  12. data/.data/cfgs/qc_iu.yaml +3 -2
  13. data/.data/cfgs/rv32-riscv-tests.yaml +5 -4
  14. data/.data/cfgs/rv32-vector.yaml +5 -4
  15. data/.data/cfgs/rv64-riscv-tests.yaml +5 -4
  16. data/.data/cfgs/rv64-vector.yaml +5 -4
  17. data/.data/spec/schemas/README.adoc +3 -0
  18. data/.data/spec/schemas/schema_defs.json +3 -3
  19. data/.data/spec/std/isa/csr/H/hcounteren.layout +3 -3
  20. data/.data/spec/std/isa/csr/H/hcounteren.yaml +31 -31
  21. data/.data/spec/std/isa/csr/H/henvcfg.yaml +1 -1
  22. data/.data/spec/std/isa/csr/H/htimedeltah.yaml +1 -1
  23. data/.data/spec/std/isa/csr/H/htinst.yaml +3 -3
  24. data/.data/spec/std/isa/csr/H/htval.yaml +3 -3
  25. data/.data/spec/std/isa/csr/H/mtinst.yaml +1 -1
  26. data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfg.yaml +1 -1
  27. data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfgh.yaml +1 -1
  28. data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfg.yaml +1 -1
  29. data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfgh.yaml +1 -1
  30. data/.data/spec/std/isa/csr/Smctr/vsctrctl.yaml +1 -1
  31. data/.data/spec/std/isa/csr/Sscofpmf/scountovf.layout +1 -1
  32. data/.data/spec/std/isa/csr/Sscofpmf/scountovf.yaml +29 -29
  33. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10.yaml +4 -4
  34. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10h.yaml +1 -1
  35. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11.yaml +4 -4
  36. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11h.yaml +1 -1
  37. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12.yaml +4 -4
  38. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12h.yaml +1 -1
  39. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13.yaml +4 -4
  40. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13h.yaml +1 -1
  41. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14.yaml +4 -4
  42. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14h.yaml +1 -1
  43. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15.yaml +4 -4
  44. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15h.yaml +1 -1
  45. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16.yaml +4 -4
  46. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16h.yaml +1 -1
  47. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17.yaml +4 -4
  48. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17h.yaml +1 -1
  49. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18.yaml +4 -4
  50. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18h.yaml +1 -1
  51. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19.yaml +4 -4
  52. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19h.yaml +1 -1
  53. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20.yaml +4 -4
  54. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20h.yaml +1 -1
  55. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21.yaml +4 -4
  56. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21h.yaml +1 -1
  57. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22.yaml +4 -4
  58. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22h.yaml +1 -1
  59. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23.yaml +4 -4
  60. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23h.yaml +1 -1
  61. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24.yaml +4 -4
  62. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24h.yaml +1 -1
  63. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25.yaml +4 -4
  64. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25h.yaml +1 -1
  65. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26.yaml +4 -4
  66. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26h.yaml +1 -1
  67. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27.yaml +4 -4
  68. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27h.yaml +1 -1
  69. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28.yaml +4 -4
  70. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28h.yaml +1 -1
  71. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29.yaml +4 -4
  72. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29h.yaml +1 -1
  73. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3.yaml +4 -4
  74. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30.yaml +4 -4
  75. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30h.yaml +1 -1
  76. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31.yaml +4 -4
  77. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31h.yaml +1 -1
  78. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3h.yaml +1 -1
  79. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4.yaml +4 -4
  80. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4h.yaml +1 -1
  81. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5.yaml +4 -4
  82. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5h.yaml +1 -1
  83. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6.yaml +4 -4
  84. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6h.yaml +1 -1
  85. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7.yaml +4 -4
  86. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7h.yaml +1 -1
  87. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8.yaml +4 -4
  88. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8h.yaml +1 -1
  89. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9.yaml +4 -4
  90. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9h.yaml +1 -1
  91. data/.data/spec/std/isa/csr/Zihpm/mhpmcounterN.layout +4 -4
  92. data/.data/spec/std/isa/csr/Zihpm/mhpmcounterNh.layout +1 -1
  93. data/.data/spec/std/isa/csr/hstateen0h.yaml +1 -1
  94. data/.data/spec/std/isa/csr/hstateen1h.yaml +1 -1
  95. data/.data/spec/std/isa/csr/hstateen2h.yaml +1 -1
  96. data/.data/spec/std/isa/csr/hstateen3h.yaml +1 -1
  97. data/.data/spec/std/isa/csr/hstatus.yaml +1 -1
  98. data/.data/spec/std/isa/csr/instreth.yaml +1 -3
  99. data/.data/spec/std/isa/csr/mcycle.yaml +6 -6
  100. data/.data/spec/std/isa/csr/minstret.yaml +3 -3
  101. data/.data/spec/std/isa/csr/minstreth.yaml +2 -2
  102. data/.data/spec/std/isa/csr/mstatus.yaml +14 -20
  103. data/.data/spec/std/isa/csr/mstatush.yaml +1 -1
  104. data/.data/spec/std/isa/csr/mtvec.yaml +16 -57
  105. data/.data/spec/std/isa/csr/senvcfg.yaml +1 -1
  106. data/.data/spec/std/isa/csr/sepc.yaml +4 -3
  107. data/.data/spec/std/isa/csr/sie.yaml +30 -4
  108. data/.data/spec/std/isa/csr/sip.yaml +17 -3
  109. data/.data/spec/std/isa/csr/sscratch.yaml +3 -2
  110. data/.data/spec/std/isa/csr/stval.yaml +3 -2
  111. data/.data/spec/std/isa/csr/stvec.yaml +14 -14
  112. data/.data/spec/std/isa/csr/time.yaml +1 -1
  113. data/.data/spec/std/isa/csr/timeh.yaml +1 -1
  114. data/.data/spec/std/isa/csr/vsepc.yaml +6 -5
  115. data/.data/spec/std/isa/csr/vstval.yaml +1 -1
  116. data/.data/spec/std/isa/csr/vstvec.yaml +17 -17
  117. data/.data/spec/std/isa/ext/M.yaml +4 -0
  118. data/.data/spec/std/isa/ext/Q.yaml +1 -1
  119. data/.data/spec/std/isa/ext/Shgatpa.yaml +1 -0
  120. data/.data/spec/std/isa/ext/Shlcofideleg.yaml +24 -0
  121. data/.data/spec/std/isa/ext/Shvstvecd.yaml +2 -2
  122. data/.data/spec/std/isa/ext/Sspm.yaml +5 -0
  123. data/.data/spec/std/isa/ext/Sstvecd.yaml +2 -2
  124. data/.data/spec/std/isa/ext/Sstvecv.yaml +2 -2
  125. data/.data/spec/std/isa/ext/Supm.yaml +17 -0
  126. data/.data/spec/std/isa/ext/Zcb.yaml +3 -0
  127. data/.data/spec/std/isa/ext/Zfbfmin.yaml +3 -5
  128. data/.data/spec/std/isa/ext/Zibi.yaml +29 -0
  129. data/.data/spec/std/isa/ext/Ziccid.yaml +29 -0
  130. data/.data/spec/std/isa/ext/Zicfilp.yaml +5 -1
  131. data/.data/spec/std/isa/ext/Zicfiss.yaml +20 -1
  132. data/.data/spec/std/isa/ext/Zihpm.yaml +3 -0
  133. data/.data/spec/std/isa/ext/Zilx.yaml +58 -0
  134. data/.data/spec/std/isa/ext/Zkt.yaml +33 -1
  135. data/.data/spec/std/isa/ext/Zvabd.yaml +21 -0
  136. data/.data/spec/std/isa/ext/Zvbc.yaml +3 -0
  137. data/.data/spec/std/isa/ext/Zvkb.yaml +3 -0
  138. data/.data/spec/std/isa/ext/Zvkg.yaml +3 -0
  139. data/.data/spec/std/isa/ext/Zvkned.yaml +3 -0
  140. data/.data/spec/std/isa/ext/Zvknha.yaml +3 -0
  141. data/.data/spec/std/isa/ext/Zvknhb.yaml +4 -2
  142. data/.data/spec/std/isa/ext/Zvksed.yaml +3 -0
  143. data/.data/spec/std/isa/ext/Zvksh.yaml +3 -0
  144. data/.data/spec/std/isa/ext/Zvkt.yaml +3 -0
  145. data/.data/spec/std/isa/inst/B/roriw.yaml +1 -1
  146. data/.data/spec/std/isa/inst/B/rorw.yaml +1 -1
  147. data/.data/spec/std/isa/inst/C/c.add.yaml +1 -0
  148. data/.data/spec/std/isa/inst/C/c.addi.yaml +1 -0
  149. data/.data/spec/std/isa/inst/C/c.addiw.yaml +1 -0
  150. data/.data/spec/std/isa/inst/C/c.addw.yaml +1 -0
  151. data/.data/spec/std/isa/inst/C/c.and.yaml +1 -0
  152. data/.data/spec/std/isa/inst/C/c.andi.yaml +1 -0
  153. data/.data/spec/std/isa/inst/C/c.lui.yaml +1 -0
  154. data/.data/spec/std/isa/inst/C/c.mv.yaml +1 -0
  155. data/.data/spec/std/isa/inst/C/c.nop.yaml +13 -2
  156. data/.data/spec/std/isa/inst/C/c.or.yaml +1 -0
  157. data/.data/spec/std/isa/inst/C/c.slli.yaml +1 -0
  158. data/.data/spec/std/isa/inst/C/c.srai.yaml +1 -0
  159. data/.data/spec/std/isa/inst/C/c.srli.yaml +1 -0
  160. data/.data/spec/std/isa/inst/C/c.sub.yaml +1 -0
  161. data/.data/spec/std/isa/inst/C/c.subw.yaml +1 -0
  162. data/.data/spec/std/isa/inst/C/c.xor.yaml +1 -0
  163. data/.data/spec/std/isa/inst/D/fld.yaml +1 -0
  164. data/.data/spec/std/isa/inst/D/fsd.yaml +1 -0
  165. data/.data/spec/std/isa/inst/F/fadd.s.yaml +1 -1
  166. data/.data/spec/std/isa/inst/F/fcvt.l.s.yaml +1 -1
  167. data/.data/spec/std/isa/inst/F/fcvt.lu.s.yaml +1 -1
  168. data/.data/spec/std/isa/inst/F/fcvt.s.l.yaml +1 -1
  169. data/.data/spec/std/isa/inst/F/fcvt.s.lu.yaml +1 -1
  170. data/.data/spec/std/isa/inst/F/fcvt.s.wu.yaml +1 -1
  171. data/.data/spec/std/isa/inst/F/fcvt.w.s.yaml +1 -1
  172. data/.data/spec/std/isa/inst/F/fcvt.wu.s.yaml +1 -1
  173. data/.data/spec/std/isa/inst/F/fdiv.s.yaml +1 -1
  174. data/.data/spec/std/isa/inst/F/feq.s.yaml +1 -1
  175. data/.data/spec/std/isa/inst/F/fle.s.yaml +1 -1
  176. data/.data/spec/std/isa/inst/F/flt.s.yaml +1 -1
  177. data/.data/spec/std/isa/inst/F/flw.yaml +2 -1
  178. data/.data/spec/std/isa/inst/F/fmadd.s.yaml +1 -1
  179. data/.data/spec/std/isa/inst/F/fmax.s.yaml +1 -1
  180. data/.data/spec/std/isa/inst/F/fmin.s.yaml +1 -1
  181. data/.data/spec/std/isa/inst/F/fmsub.s.yaml +1 -1
  182. data/.data/spec/std/isa/inst/F/fmul.s.yaml +1 -1
  183. data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +4 -1
  184. data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +4 -1
  185. data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +1 -1
  186. data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +1 -1
  187. data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +1 -1
  188. data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +1 -1
  189. data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +1 -1
  190. data/.data/spec/std/isa/inst/F/fsqrt.s.yaml +1 -1
  191. data/.data/spec/std/isa/inst/F/fsub.s.yaml +1 -1
  192. data/.data/spec/std/isa/inst/F/fsw.yaml +2 -1
  193. data/.data/spec/std/isa/inst/I/sd.yaml +1 -1
  194. data/.data/spec/std/isa/inst/M/mul.yaml +1 -3
  195. data/.data/spec/std/isa/inst/M/mulh.yaml +1 -3
  196. data/.data/spec/std/isa/inst/M/mulhsu.yaml +1 -3
  197. data/.data/spec/std/isa/inst/M/mulhu.yaml +1 -3
  198. data/.data/spec/std/isa/inst/M/mulw.yaml +1 -3
  199. data/.data/spec/std/isa/inst/Q/fadd.q.yaml +2 -2
  200. data/.data/spec/std/isa/inst/Q/fclass.q.yaml +5 -5
  201. data/.data/spec/std/isa/inst/Q/flq.yaml +1 -0
  202. data/.data/spec/std/isa/inst/Q/fsq.yaml +1 -0
  203. data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +1 -0
  204. data/.data/spec/std/isa/inst/Zbb/ctzw.yaml +6 -1
  205. data/.data/spec/std/isa/inst/Zcb/c.mul.yaml +1 -0
  206. data/.data/spec/std/isa/inst/Zcb/c.not.yaml +1 -0
  207. data/.data/spec/std/isa/inst/Zcb/c.zext.b.yaml +2 -7
  208. data/.data/spec/std/isa/inst/Zcb/c.zext.w.yaml +1 -1
  209. data/.data/spec/std/isa/inst/Zcmop/c.mop.1.yaml +2 -0
  210. data/.data/spec/std/isa/inst/Zcmop/c.mop.5.yaml +2 -0
  211. data/.data/spec/std/isa/inst/Zcmop/c.mop.N.layout +7 -0
  212. data/.data/spec/std/isa/inst/{Q → Zfa}/fleq.q.yaml +0 -1
  213. data/.data/spec/std/isa/inst/{F → Zfa}/fleq.s.yaml +1 -1
  214. data/.data/spec/std/isa/inst/{Q → Zfa}/fli.q.yaml +1 -1
  215. data/.data/spec/std/isa/inst/Zfa/fli.s.yaml +1 -1
  216. data/.data/spec/std/isa/inst/{Q → Zfa}/fltq.q.yaml +2 -3
  217. data/.data/spec/std/isa/inst/{F → Zfa}/fltq.s.yaml +1 -1
  218. data/.data/spec/std/isa/inst/{Q → Zfa}/fmaxm.q.yaml +0 -1
  219. data/.data/spec/std/isa/inst/Zfa/fmaxm.s.yaml +1 -1
  220. data/.data/spec/std/isa/inst/{Q → Zfa}/fminm.q.yaml +0 -1
  221. data/.data/spec/std/isa/inst/Zfa/fminm.s.yaml +1 -1
  222. data/.data/spec/std/isa/inst/{Q → Zfa}/fmvp.q.x.yaml +1 -1
  223. data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +1 -1
  224. data/.data/spec/std/isa/inst/Zfa/froundnx.s.yaml +1 -1
  225. data/.data/spec/std/isa/inst/Zfh/flh.yaml +5 -2
  226. data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +3 -1
  227. data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +3 -1
  228. data/.data/spec/std/isa/inst/Zfh/fsh.yaml +4 -1
  229. data/.data/spec/std/isa/inst/Zibi/beqi.yaml +45 -0
  230. data/.data/spec/std/isa/inst/Zibi/bnei.yaml +45 -0
  231. data/.data/spec/std/isa/inst/Zicbom/cbo.inval.yaml +1 -1
  232. data/.data/spec/std/isa/inst/Zicfiss/c.sspopchk.yaml +30 -0
  233. data/.data/spec/std/isa/inst/Zicfiss/c.sspush.yaml +29 -0
  234. data/.data/spec/std/isa/inst/Zicfiss/ssamoswap.d.yaml +1 -1
  235. data/.data/spec/std/isa/inst/Zicfiss/ssamoswap.w.yaml +1 -1
  236. data/.data/spec/std/isa/inst/Zicfiss/sspopchk.yaml +63 -0
  237. data/.data/spec/std/isa/inst/Zicfiss/sspush.yaml +63 -0
  238. data/.data/spec/std/isa/inst/Zicond/czero.eqz.yaml +1 -1
  239. data/.data/spec/std/isa/inst/Zicond/czero.nez.yaml +1 -1
  240. data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +12 -0
  241. data/.data/spec/std/isa/inst/Zilx/lxd.yaml +38 -0
  242. data/.data/spec/std/isa/inst/Zilx/lxh.yaml +35 -0
  243. data/.data/spec/std/isa/inst/Zilx/lxhu.yaml +35 -0
  244. data/.data/spec/std/isa/inst/Zilx/lxsb.yaml +40 -0
  245. data/.data/spec/std/isa/inst/Zilx/lxsbu.yaml +40 -0
  246. data/.data/spec/std/isa/inst/Zilx/lxsd.yaml +38 -0
  247. data/.data/spec/std/isa/inst/Zilx/lxsh.yaml +35 -0
  248. data/.data/spec/std/isa/inst/Zilx/lxshu.yaml +35 -0
  249. data/.data/spec/std/isa/inst/Zilx/lxsuwb.yaml +40 -0
  250. data/.data/spec/std/isa/inst/Zilx/lxsuwbu.yaml +40 -0
  251. data/.data/spec/std/isa/inst/Zilx/lxsuwd.yaml +39 -0
  252. data/.data/spec/std/isa/inst/Zilx/lxsuwh.yaml +40 -0
  253. data/.data/spec/std/isa/inst/Zilx/lxsuwhu.yaml +40 -0
  254. data/.data/spec/std/isa/inst/Zilx/lxsuww.yaml +40 -0
  255. data/.data/spec/std/isa/inst/Zilx/lxsuwwu.yaml +40 -0
  256. data/.data/spec/std/isa/inst/Zilx/lxsw.yaml +35 -0
  257. data/.data/spec/std/isa/inst/Zilx/lxswu.yaml +39 -0
  258. data/.data/spec/std/isa/inst/Zilx/lxw.yaml +35 -0
  259. data/.data/spec/std/isa/inst/Zilx/lxwu.yaml +39 -0
  260. data/.data/spec/std/isa/inst/Zimop/mop.r.28.yaml +1 -2
  261. data/.data/spec/std/isa/inst/Zimop/mop.r.N.layout +1 -2
  262. data/.data/spec/std/isa/inst/Zimop/mop.rr.7.yaml +1 -2
  263. data/.data/spec/std/isa/inst/Zimop/mop.rr.N.layout +1 -2
  264. data/.data/spec/std/isa/inst/Zvabd/vabd.vv.yaml +67 -0
  265. data/.data/spec/std/isa/inst/Zvabd/vabdu.vv.yaml +67 -0
  266. data/.data/spec/std/isa/inst/Zvabd/vabs.v.yaml +61 -0
  267. data/.data/spec/std/isa/inst/Zvabd/vwabda.vv.yaml +72 -0
  268. data/.data/spec/std/isa/inst/Zvabd/vwabdau.vv.yaml +72 -0
  269. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vandn.vv.yaml +1 -1
  270. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vandn.vx.yaml +1 -1
  271. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vbrev8.v.yaml +1 -1
  272. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vrev8.v.yaml +1 -1
  273. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vrol.vv.yaml +1 -1
  274. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vrol.vx.yaml +1 -1
  275. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vror.vi.yaml +1 -1
  276. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vror.vv.yaml +1 -1
  277. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vror.vx.yaml +1 -1
  278. data/.data/spec/std/isa/isa/fp.idl +42 -18
  279. data/.data/spec/std/isa/isa/globals.isa +1 -1
  280. data/.data/spec/std/isa/isa/util.idl +3 -3
  281. data/.data/spec/std/isa/param/CACHE_BLOCK_SIZE.yaml +70 -6
  282. data/.data/spec/std/isa/param/COUNTINHIBIT_EN.yaml +9 -0
  283. data/.data/spec/std/isa/param/ELEN.yaml +27 -5
  284. data/.data/spec/std/isa/param/HCONTEXT_AVAILABLE.yaml +1 -1
  285. data/.data/spec/std/isa/param/HCOUNTENABLE_EN.yaml +13 -0
  286. data/.data/spec/std/isa/param/HPM_COUNTER_EN.yaml +13 -3
  287. data/.data/spec/std/isa/param/HPM_EVENTS.yaml +0 -3
  288. data/.data/spec/std/isa/param/MCOUNTENABLE_EN.yaml +8 -0
  289. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_DIRECT.yaml +71 -65
  290. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_VECTORED.yaml +71 -65
  291. data/.data/spec/std/isa/param/MUTABLE_MISA_H.yaml +1 -1
  292. data/.data/spec/std/isa/param/MUTABLE_MISA_S.yaml +1 -1
  293. data/.data/spec/std/isa/param/STVAL_WIDTH.yaml +3 -2
  294. data/.data/spec/std/isa/param/STVEC_BASE_ALIGNMENT_VECTORED.yaml +100 -0
  295. data/.data/spec/std/isa/param/STVEC_MODES.yaml +31 -0
  296. data/.data/spec/std/isa/param/SV32_VSMODE_TRANSLATION.yaml +1 -1
  297. data/.data/spec/std/isa/param/SXLEN.yaml +2 -2
  298. data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_INSTRUCTION_GUEST_PAGE_FAULT.yaml +1 -1
  299. data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_LOAD_GUEST_PAGE_FAULT.yaml +1 -1
  300. data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_STORE_AMO_GUEST_PAGE_FAULT.yaml +1 -1
  301. data/.data/spec/std/isa/param/TINST_VALUE_ON_LOAD_ADDRESS_MISALIGNED.yaml +1 -1
  302. data/.data/spec/std/isa/param/TINST_VALUE_ON_STORE_AMO_ADDRESS_MISALIGNED.yaml +1 -1
  303. data/.data/spec/std/isa/param/UXLEN.yaml +1 -1
  304. data/.data/spec/std/isa/param/VLEN.yaml +16 -7
  305. data/.data/spec/std/isa/param/VSTVEC_MODES.yaml +31 -0
  306. data/lib/udb/Z3_VERSION +1 -1
  307. data/lib/udb/config.rb +1 -1
  308. data/lib/udb/obj/csr.rb +1 -1
  309. data/lib/udb/obj/csr_field.rb +1 -1
  310. data/lib/udb/obj/extension.rb +1 -1
  311. data/lib/udb/version.rb +1 -1
  312. data/lib/udb/version_spec.rb +1 -1
  313. data/lib/udb/z3.rb +29 -7
  314. metadata +80 -50
  315. data/.data/spec/std/isa/inst/Zicfiss/sspopchk.x1.yaml +0 -25
  316. data/.data/spec/std/isa/inst/Zicfiss/sspopchk.x5.yaml +0 -25
  317. data/.data/spec/std/isa/inst/Zicfiss/sspush.x1.yaml +0 -25
  318. data/.data/spec/std/isa/inst/Zicfiss/sspush.x5.yaml +0 -25
  319. data/.data/spec/std/isa/param/STVEC_MODE_DIRECT.yaml +0 -21
  320. data/.data/spec/std/isa/param/STVEC_MODE_VECTORED.yaml +0 -19
  321. data/.data/spec/std/isa/param/VSTVEC_MODE_DIRECT.yaml +0 -21
  322. data/.data/spec/std/isa/param/VSTVEC_MODE_VECTORED.yaml +0 -21
  323. /data/.data/spec/std/isa/inst/{Smdbltrp → Smctr}/sctrclr.yaml +0 -0
  324. /data/.data/spec/std/isa/inst/{D → Zfa}/fcvtmod.w.d.yaml +0 -0
  325. /data/.data/spec/std/isa/inst/{D → Zfa}/fleq.d.yaml +0 -0
  326. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fleq.h.yaml +0 -0
  327. /data/.data/spec/std/isa/inst/{D → Zfa}/fli.d.yaml +0 -0
  328. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fli.h.yaml +0 -0
  329. /data/.data/spec/std/isa/inst/{D → Zfa}/fltq.d.yaml +0 -0
  330. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fltq.h.yaml +0 -0
  331. /data/.data/spec/std/isa/inst/{D → Zfa}/fmaxm.d.yaml +0 -0
  332. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fmaxm.h.yaml +0 -0
  333. /data/.data/spec/std/isa/inst/{D → Zfa}/fminm.d.yaml +0 -0
  334. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fminm.h.yaml +0 -0
  335. /data/.data/spec/std/isa/inst/{D → Zfa}/fmvh.x.d.yaml +0 -0
  336. /data/.data/spec/std/isa/inst/{Q → Zfa}/fmvh.x.q.yaml +0 -0
  337. /data/.data/spec/std/isa/inst/{D → Zfa}/fmvp.d.x.yaml +0 -0
  338. /data/.data/spec/std/isa/inst/{D → Zfa}/fround.d.yaml +0 -0
  339. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fround.h.yaml +0 -0
  340. /data/.data/spec/std/isa/inst/{Q → Zfa}/fround.q.yaml +0 -0
  341. /data/.data/spec/std/isa/inst/{D → Zfa}/froundnx.d.yaml +0 -0
  342. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/froundnx.h.yaml +0 -0
  343. /data/.data/spec/std/isa/inst/{Q → Zfa}/froundnx.q.yaml +0 -0
@@ -82,14 +82,14 @@ fields:
82
82
  <%%- if ext?(:Sscofpmf) -%>
83
83
  * `mhpmevent<%= hpm_num %>.MINH` is set and the current privilege level is M
84
84
  <%%- if ext?(:S) -%>
85
- * `mhpmevent<%= hpm_num %>.SINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>..SINH`<%%- end -%> is set and the current privilege level is (H)S
85
+ * `mhpmevent<%= hpm_num %>.SINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.SINH`<%%- end -%> is set and the current privilege level is (H)S
86
86
  <%%- end -%>
87
87
  <%%- if ext?(:U) -%>
88
- * `mhpmevent<%= hpm_num %>.UINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.SINH`<%%- end -%> is set and the current privilege level is U
88
+ * `mhpmevent<%= hpm_num %>.UINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.UINH`<%%- end -%> is set and the current privilege level is U
89
89
  <%%- end -%>
90
90
  <%%- if ext?(:H) -%>
91
- * `mhpmevent<%= hpm_num %>.VSINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.SINH`<%%- end -%> is set and the current privilege level is VS
92
- * `mhpmevent<%= hpm_num %>.VUINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.SINH`<%%- end -%> is set and the current privilege level is VU
91
+ * `mhpmevent<%= hpm_num %>.VSINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.VSINH`<%%- end -%> is set and the current privilege level is VS
92
+ * `mhpmevent<%= hpm_num %>.VUINH` <%%- if ext?(:Ssccfg) -%>or its alias `hpmevent<%= hpm_num %>.VUINH`<%%- end -%> is set and the current privilege level is VU
93
93
  <%%- end -%>
94
94
  <%%- end -%>
95
95
  --
@@ -72,7 +72,7 @@ definedBy:
72
72
  fields:
73
73
  COUNT:
74
74
  location: 31-0
75
- alias: mhpmcounter.COUNT<%= hpm_num %>[63:32]
75
+ alias: mhpmcounter<%= hpm_num %>.COUNT[63:32]
76
76
  description: |
77
77
  Upper bits of counter.
78
78
  type(): |
@@ -156,4 +156,4 @@ fields:
156
156
  `mstateen0.CTR=0`.
157
157
  type: RW
158
158
  reset_value: 0
159
- sw_read(): return $bits(CSR[hstateen0])[63:32];
159
+ sw_read(): return CSR[hstateen0].sw_read()[63:32];
@@ -44,4 +44,4 @@ fields:
44
44
  The SE0 bit in `hstateen1h` controls access to the `sstateen1` CSR.
45
45
  type: RW
46
46
  reset_value: UNDEFINED_LEGAL
47
- sw_read(): return $bits(CSR[hstateen1])[63:32];
47
+ sw_read(): return CSR[hstateen1].sw_read()[63:32];
@@ -44,4 +44,4 @@ fields:
44
44
  The SE0 bit in `hstateen2h` controls access to the `sstateen2` CSR.
45
45
  type: RW
46
46
  reset_value: UNDEFINED_LEGAL
47
- sw_read(): return $bits(CSR[hstateen2])[63:32];
47
+ sw_read(): return CSR[hstateen2].sw_read()[63:32];
@@ -44,4 +44,4 @@ fields:
44
44
  The SE0 bit in `hstateen3h` controls access to the `sstateen3` CSR.
45
45
  type: RW
46
46
  reset_value: UNDEFINED_LEGAL
47
- sw_read(): return $bits(CSR[hstateen3])[63:32];
47
+ sw_read(): return CSR[hstateen3].sw_read()[63:32];
@@ -138,7 +138,7 @@ fields:
138
138
 
139
139
  Notably, `hstatus.VTVM` does *not* cause `hfence.vvma`, `sfence.w.inval`, or `sfence.inval.ir` to trap.
140
140
 
141
- `mstatus.TVM` does not affect the VS-mode instructions controlled by `hstatus.TVTM`.
141
+ `mstatus.TVM` does not affect the VS-mode instructions controlled by `hstatus.VTVM`.
142
142
  type: RW
143
143
  reset_value: UNDEFINED_LEGAL
144
144
  VGEIN:
@@ -76,6 +76,4 @@ sw_read(): |
76
76
  }
77
77
  }
78
78
 
79
- # since the counter may be shared among harts, reads must be handled
80
- # as a builtin function
81
- return read_mcycle();
79
+ return CSR[minstret].COUNT[63:32];
@@ -32,7 +32,7 @@ fields:
32
32
  # since writes to this register may not be hart-local, it must be handled
33
33
  # as a special case
34
34
  if (xlen() == 32) {
35
- return sw_write_mcycle({read_mcycle()[63:31], csr_value.COUNT[31:0]});
35
+ return sw_write_mcycle({read_mcycle()[63:32], csr_value.COUNT[31:0]});
36
36
  } else {
37
37
  return sw_write_mcycle(csr_value.COUNT);
38
38
  }
@@ -40,7 +40,7 @@ fields:
40
40
  Cycle counter.
41
41
 
42
42
  <%- if ext?(:Zicntr) -%>
43
- Aliased as `cycle.CYCLE`.
43
+ Aliased as `cycle.COUNT`.
44
44
  <%- end -%>
45
45
 
46
46
  Increments every cycle unless:
@@ -49,14 +49,14 @@ fields:
49
49
  <%- if ext?(:Smcntrpmf) -%>
50
50
  * `mcyclecfg.MINH` is set and the current privilege level is M
51
51
  <%- if ext?(:S) -%>
52
- * `mcyclecfg.SINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.SINH`<%- end -%> is set and the current privilege level is (H)S
52
+ * `mcyclecfg.SINH` <%- if ext?(:Ssccfg) -%>or its alias `cyclecfg.SINH`<%- end -%> is set and the current privilege level is (H)S
53
53
  <%- end -%>
54
54
  <%- if ext?(:U) -%>
55
- * `mcyclecfg.UINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.SINH`<%- end -%> is set and the current privilege level is U
55
+ * `mcyclecfg.UINH` <%- if ext?(:Ssccfg) -%>or its alias `cyclecfg.UINH`<%- end -%> is set and the current privilege level is U
56
56
  <%- end -%>
57
57
  <%- if ext?(:H) -%>
58
- * `mcyclecfg.VSINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.SINH`<%- end -%> is set and the current privilege level is VS
59
- * `mcyclecfg.VUINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.SINH`<%- end -%> is set and the current privilege level is VU
58
+ * `mcyclecfg.VSINH` <%- if ext?(:Ssccfg) -%>or its alias `cyclecfg.VSINH`<%- end -%> is set and the current privilege level is VS
59
+ * `mcyclecfg.VUINH` <%- if ext?(:Ssccfg) -%>or its alias `cyclecfg.VUINH`<%- end -%> is set and the current privilege level is VU
60
60
  <%- end -%>
61
61
  <%- end -%>
62
62
  reset_value: UNDEFINED_LEGAL
@@ -37,11 +37,11 @@ fields:
37
37
  * `minstretcfg.SINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.SINH`<%- end -%> is set and the current privilege level is (H)S
38
38
  <%- end -%>
39
39
  <%- if ext?(:U) -%>
40
- * `minstretcfg.UINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.SINH`<%- end -%> is set and the current privilege level is U
40
+ * `minstretcfg.UINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.UINH`<%- end -%> is set and the current privilege level is U
41
41
  <%- end -%>
42
42
  <%- if ext?(:H) -%>
43
- * `minstretcfg.VSINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.SINH`<%- end -%> is set and the current privilege level is VS
44
- * `minstretcfg.VUINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.SINH`<%- end -%> is set and the current privilege level is VU
43
+ * `minstretcfg.VSINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.VSINH`<%- end -%> is set and the current privilege level is VS
44
+ * `minstretcfg.VUINH` <%- if ext?(:Ssccfg) -%>or its alias `instretcfg.VUINH`<%- end -%> is set and the current privilege level is VU
45
45
  <%- end -%>
46
46
  <%- end -%>
47
47
 
@@ -28,12 +28,12 @@ fields:
28
28
  reset_value: UNDEFINED_LEGAL
29
29
  affectedBy: [Zicntr, Smcntrpmf, Smcdeleg, Ssccfg]
30
30
  sw_write(csr_value): |
31
- CSR[mcycle].COUNT = {csr_value.COUNT[31:0], CSR[minstret].COUNT[31:0]};
31
+ CSR[minstret].COUNT = {csr_value.COUNT[31:0], CSR[minstret].COUNT[31:0]};
32
32
  return csr_value.COUNT;
33
33
  definedBy:
34
34
  allOf:
35
35
  - xlen: 32
36
36
  - extension:
37
- name: Zicntr
37
+ name: Sm
38
38
  sw_read(): |
39
39
  return CSR[minstret].COUNT[63:32];
@@ -71,7 +71,7 @@ fields:
71
71
  - extension:
72
72
  name: Smdbltrp
73
73
  type: RW-H
74
- reset_value: UNDEFINED_LEGAL
74
+ reset_value: 1
75
75
  MPELP:
76
76
  location: 41
77
77
  long_name: M-mode Previous Expected Landing Pad state
@@ -111,7 +111,11 @@ fields:
111
111
  long_name: Guest Virtual Address
112
112
  description: |
113
113
  When a trap is taken and a guest virtual address is written into mtval, GVA is set.
114
- When a trap is taken and a guest virtual address is written into mtval, GVA is cleared.
114
+ GVA is written by the implementation whenever a trap is taken into
115
+ HS mode. For any trap (breakpoint, address misaligned, access fault,
116
+ page fault, or guest-page fault) that writes a guest virtual address to
117
+ `stval`, GVA is set to 1. For any other trap into HS-mode,
118
+ GVA is set to 0.
115
119
  type: RW-H
116
120
  reset_value: 0
117
121
  definedBy:
@@ -436,6 +440,10 @@ fields:
436
440
  - name: F
437
441
  - name: S
438
442
  reset_value(): |
443
+ if (MISA_CSR_IMPLEMENTED && (CSR[misa].S == 1'b0) && (CSR[misa].F == 1'b0)) {
444
+ # must be read-only-0
445
+ return 0;
446
+ }
439
447
  return $array_size(MSTATUS_FS_LEGAL_VALUES) == 1 ? MSTATUS_FS_LEGAL_VALUES[0] : UNDEFINED_LEGAL;
440
448
  sw_write(csr_value): |
441
449
  if (MISA_CSR_IMPLEMENTED && (CSR[misa].S == 1'b0) && (CSR[misa].F == 1'b0)) {
@@ -499,31 +507,17 @@ fields:
499
507
  return $array_size(MSTATUS_VS_LEGAL_VALUES) == 1 ? CsrFieldType::RO : CsrFieldType::RW;
500
508
  }
501
509
  reset_value(): |
502
- if (CSR[misa].V == 1'b1){
503
- return UNDEFINED_LEGAL;
504
- } else if ((CSR[misa].S == 1'b0) && (CSR[misa].V == 1'b0)) {
510
+ if ((!implemented?(ExtensionName::S) && !implemented?(ExtensionName::V)) || (MISA_CSR_IMPLEMENTED && (CSR[misa].S == 1'b0) && (CSR[misa].V == 1'b0))) {
505
511
  # must be read-only-0
506
512
  return 0;
507
- } else {
508
- # there will be no hardware update in this case because we know the V extension isn't implemented
509
- if ($array_size(MSTATUS_VS_LEGAL_VALUES) == 0) {
510
- return 0;
511
- } else if ($array_size(MSTATUS_VS_LEGAL_VALUES) == 1) {
512
- return MSTATUS_VS_LEGAL_VALUES[0];
513
- } else {
514
- return UNDEFINED_LEGAL;
515
- }
516
513
  }
514
+ return $array_size(MSTATUS_VS_LEGAL_VALUES) == 1 ? MSTATUS_VS_LEGAL_VALUES[0] : UNDEFINED_LEGAL;
517
515
  sw_write(csr_value): |
518
- if (implemented?(ExtensionName::V) && CSR[misa].V == 1'b1){
519
- return $array_includes?(MSTATUS_VS_LEGAL_VALUES, csr_value.VS) ? csr_value.VS : UNDEFINED_LEGAL_DETERMINISTIC;
520
- } else if (!implemented?(ExtensionName::S) && !implemented?(ExtensionName::V)) {
516
+ if ((!implemented?(ExtensionName::S) && !implemented?(ExtensionName::V)) || (MISA_CSR_IMPLEMENTED && (CSR[misa].S == 1'b0) && (CSR[misa].V == 1'b0))) {
521
517
  # must be read-only-0
522
518
  return 0;
523
- } else {
524
- # there will be no hardware update in this case because we know the V extension isn't implemented
525
- return $array_includes?(MSTATUS_VS_LEGAL_VALUES, csr_value.VS) ? csr_value.VS : UNDEFINED_LEGAL_DETERMINISTIC;
526
519
  }
520
+ return $array_includes?(MSTATUS_VS_LEGAL_VALUES, csr_value.VS) ? csr_value.VS : UNDEFINED_LEGAL_DETERMINISTIC;
527
521
  SPP:
528
522
  location: 8
529
523
  long_name: S-mode Previous Privilege
@@ -26,7 +26,7 @@ fields:
26
26
  description: |
27
27
  see `mstatus.MDT`
28
28
  type: RW-H
29
- reset_value: UNDEFINED_LEGAL
29
+ reset_value: 1
30
30
  alias: mstatus.MDT
31
31
  definedBy:
32
32
  extension:
@@ -30,37 +30,15 @@ fields:
30
30
  # implementations may put further constraints on BASE when MODE != Direct
31
31
  # If that is the case, stvec should have an override for the implementation
32
32
 
33
- if (csr_value.MODE == 0) {
34
- if ($array_includes?(MTVEC_MODES, 0)) {
35
- return csr_value.BASE;
36
- }
37
- if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
38
- return CSR[mtvec].BASE;
39
- }
40
- if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
41
- return UNDEFINED_LEGAL_DETERMINISTIC;
42
- }
43
- unreachable();
44
- } else if (csr_value.MODE == 1) {
45
- if ($array_includes?(MTVEC_MODES, 1)) {
46
- return csr_value.BASE;
47
- }
48
- if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
49
- return CSR[mtvec].BASE;
50
- }
51
- if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
52
- return UNDEFINED_LEGAL_DETERMINISTIC;
53
- }
54
- unreachable();
55
- } else {
56
- if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
57
- return CSR[mtvec].BASE;
58
- }
59
- if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
60
- return UNDEFINED_LEGAL_DETERMINISTIC;
61
- }
62
- unreachable();
33
+ if ($array_includes?(MTVEC_MODES, csr_value.MODE)) {
34
+ return csr_value.BASE;
63
35
  }
36
+ if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
37
+ return CSR[mtvec].BASE;
38
+ } else if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
39
+ return UNDEFINED_LEGAL_DETERMINISTIC;
40
+ }
41
+ unreachable();
64
42
  reset_value: 0
65
43
  MODE:
66
44
  location: 1-0
@@ -71,7 +49,7 @@ fields:
71
49
 
72
50
  When Direct, all synchronous exceptions and asynchronous interrupts jump to (`mtvec.BASE` << 2).
73
51
 
74
- When Vectored, asynchronous interrupts jump to (`mtvec.BASE` << 2 + `mcause.CAUSE`*4) while synchronous exceptions continue to jump to (`mtvec.BASE` << 2).
52
+ When Vectored, asynchronous interrupts jump to (`mtvec.BASE` << 2 + `mcause.CODE`*4) while synchronous exceptions continue to jump to (`mtvec.BASE` << 2).
75
53
  type(): |
76
54
  if (MTVEC_ACCESS == "ro") {
77
55
  return CsrFieldType::RO;
@@ -79,32 +57,13 @@ fields:
79
57
 
80
58
  return ($array_size(MTVEC_MODES) == 1) ? CsrFieldType::RO : CsrFieldType::RWR;
81
59
  sw_write(csr_value): |
82
- if (csr_value.MODE == 0) {
83
- if ($array_includes?(MTVEC_MODES, 0)) {
84
- return csr_value.MODE;
85
- } else {
86
- if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
87
- return CSR[mtvec].MODE;
88
- } else if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
89
- return UNDEFINED_LEGAL_DETERMINISTIC;
90
- }
91
- }
92
- } else if (csr_value.MODE == 1) {
93
- if ($array_includes?(MTVEC_MODES, 1)) {
94
- return csr_value.MODE;
95
- } else {
96
- if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
97
- return CSR[mtvec].MODE;
98
- } else if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
99
- return UNDEFINED_LEGAL_DETERMINISTIC;
100
- }
101
- }
102
- } else {
103
- if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
104
- return CSR[mtvec].MODE;
105
- } else if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
106
- return UNDEFINED_LEGAL_DETERMINISTIC;
107
- }
60
+ if ($array_includes?(MTVEC_MODES, csr_value.MODE)) {
61
+ return csr_value.MODE;
62
+ }
63
+ if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "retain") {
64
+ return CSR[mtvec].MODE;
65
+ } else if (MTVEC_ILLEGAL_WRITE_BEHAVIOR == "custom") {
66
+ return UNDEFINED_LEGAL_DETERMINISTIC;
108
67
  }
109
68
  unreachable();
110
69
  reset_value(): |
@@ -12,7 +12,7 @@ long_name: Supervisor Environment Configuration
12
12
  description: |
13
13
  Contains fields that control certain characteristics of the U-mode execution environment.
14
14
  priv_mode: S
15
- length: 64
15
+ length: SXLEN
16
16
  definedBy:
17
17
  extension:
18
18
  allOf:
@@ -10,7 +10,7 @@ long_name: Supervisor Exception Program Counter
10
10
  address: 0x141
11
11
  writable: true
12
12
  priv_mode: S
13
- length: 64
13
+ length: SXLEN
14
14
  description: |
15
15
  Written with the PC of an instruction on an exception or interrupt taken in (H)S-mode.
16
16
 
@@ -20,7 +20,8 @@ definedBy:
20
20
  name: S
21
21
  fields:
22
22
  PC:
23
- location: 63-0
23
+ location_rv32: 31-0
24
+ location_rv64: 63-0
24
25
  description: |
25
26
  When a trap is taken into S-mode, `sepc.PC` is written with the virtual address of the
26
27
  instruction that was interrupted or that encountered the exception.
@@ -38,7 +39,7 @@ fields:
38
39
  When `misa.C` is clear, bit 1 is masked to zero. Writes to bit 1 are still captured, and
39
40
  may be visible on the next read with `misa.C` is set.
40
41
 
41
- Holds bits 63:<%= ext?(:C) ? 2 : 1 %> of the virtual address associated with an exception.
42
+ Holds bits [SXLEN-1:<%= ext?(:C) ? 2 : 1 %>] of the virtual address associated with an exception.
42
43
  type: RW-RH
43
44
  sw_write(csr_value): |
44
45
  return csr_value.PC & ~64'b1;
@@ -15,34 +15,60 @@ definedBy:
15
15
  length: SXLEN
16
16
  description: Supervisor interrupt-enable register.
17
17
  writable: true
18
+ sw_read(): |
19
+ return $bits(CSR[mie]) & $bits(CSR[mideleg]);
18
20
  fields:
19
21
  SSIE:
20
22
  location: 1
21
23
  alias: mie.SSIE
22
24
  description: |
23
25
  Supervisor Software Interrupt Enable
24
- type: RW
26
+ type: RW-R
27
+ sw_write(csr_value): |
28
+ if (CSR[mideleg].SSI == 1'b1) {
29
+ CSR[mie].SSIE = csr_value.SSIE;
30
+ return csr_value.SSIE;
31
+ }
32
+ return 1'b0;
25
33
  reset_value: UNDEFINED_LEGAL
26
34
  STIE:
27
35
  location: 5
28
36
  alias: mie.STIE
29
37
  description: |
30
38
  Supervisor Timer Interrupt Enable
31
- type: RW
39
+ type: RW-R
40
+ sw_write(csr_value): |
41
+ if (CSR[mideleg].STI == 1'b1) {
42
+ CSR[mie].STIE = csr_value.STIE;
43
+ return csr_value.STIE;
44
+ }
45
+ return 1'b0;
32
46
  reset_value: UNDEFINED_LEGAL
33
47
  SEIE:
34
48
  location: 9
35
49
  alias: mie.SEIE
36
50
  description: |
37
51
  Supervisor External Interrupt Enable
38
- type: RW
52
+ type: RW-R
53
+ sw_write(csr_value): |
54
+ if (CSR[mideleg].SEI == 1'b1) {
55
+ CSR[mie].SEIE = csr_value.SEIE;
56
+ return csr_value.SEIE;
57
+ }
58
+ return 1'b0;
39
59
  reset_value: UNDEFINED_LEGAL
40
60
  LCOFIE:
41
61
  location: 13
42
62
  alias: mie.LCOFIE
43
63
  description: |
44
64
  Local Counter Overflow Interrupt Enable
45
- type: RW
65
+ type: RW-R
66
+ sw_write(csr_value): |
67
+ if (CSR[mideleg].LCOFI == 1'b1) {
68
+ CSR[mie].LCOFIE = csr_value.LCOFIE;
69
+ return csr_value.LCOFIE;
70
+ }
71
+ return 1'b0;
46
72
  reset_value: UNDEFINED_LEGAL
47
73
  definedBy:
48
74
  extension:
@@ -15,10 +15,12 @@ description: |
15
15
 
16
16
  Hypervisor-related interrupts (VS-mode interrupts and Supervisor Guest interrupts) are not reflected
17
17
  in `sip` even though those interrupts can be taken in HS-mode. Instead, they are reported through `hip`.
18
- length: 64
18
+ length: SXLEN
19
19
  definedBy:
20
20
  extension:
21
21
  name: S
22
+ sw_read(): |
23
+ return $bits(CSR[mip]) & $bits(CSR[mideleg]);
22
24
  fields:
23
25
  SSIP:
24
26
  location: 1
@@ -59,7 +61,13 @@ fields:
59
61
  ! 0 ! read-only 0
60
62
  ! 1 ! writable alias of `mip.SSIP` <% if ext?(:Smaia) %>and `mvip.SSIP`<% end %>
61
63
  !===
62
- type: RW
64
+ type: RW-R
65
+ sw_write(csr_value): |
66
+ if (CSR[mideleg].SSI == 1'b1) {
67
+ CSR[mip].SSIP = csr_value.SSIP;
68
+ return csr_value.SSIP;
69
+ }
70
+ return 1'b0;
63
71
  reset_value: UNDEFINED_LEGAL
64
72
  definedBy:
65
73
  extension:
@@ -153,7 +161,13 @@ fields:
153
161
  ! 1
154
162
  a! writable alias of `mip.LCOFIP` (and `vsip.LCOFIP` when `hideleg.LCOFI` is set)
155
163
  !===
156
- type: RW-H
164
+ type: RW-RH
165
+ sw_write(csr_value): |
166
+ if (CSR[mideleg].LCOFI == 1'b1) {
167
+ CSR[mip].LCOFIP = csr_value.LCOFIP;
168
+ return csr_value.LCOFIP;
169
+ }
170
+ return 1'b0;
157
171
  reset_value: UNDEFINED_LEGAL
158
172
  definedBy:
159
173
  extension:
@@ -10,14 +10,15 @@ long_name: Supervisor Scratch Register
10
10
  address: 0x140
11
11
  writable: true
12
12
  priv_mode: S
13
- length: 64
13
+ length: SXLEN
14
14
  description: Scratch register for software use. Bits are not interpreted by hardware.
15
15
  definedBy: # actually, defined by RV64, but must implement U-mode for this CSR to exist
16
16
  extension:
17
17
  name: S
18
18
  fields:
19
19
  SCRATCH:
20
- location: 63-0
20
+ location_rv32: 31-0
21
+ location_rv64: 63-0
21
22
  description: Scratch value
22
23
  type: RW
23
24
  reset_value: UNDEFINED_LEGAL
@@ -11,13 +11,14 @@ address: 0x143
11
11
  writable: true
12
12
  description: Holds trap-specific information
13
13
  priv_mode: S
14
- length: 64
14
+ length: SXLEN
15
15
  definedBy:
16
16
  extension:
17
17
  name: S
18
18
  fields:
19
19
  VALUE:
20
- location: 63-0
20
+ location_rv32: 31-0
21
+ location_rv64: 63-0
21
22
  description: |
22
23
  Written with trap-specific information when a trap is taken into S-mode.
23
24
 
@@ -10,19 +10,20 @@ long_name: Supervisor Trap Vector
10
10
  address: 0x105
11
11
  writable: true
12
12
  priv_mode: S
13
- length: 64
13
+ length: SXLEN
14
14
  description: Controls where traps jump.
15
15
  definedBy:
16
16
  extension:
17
17
  name: S
18
18
  fields:
19
19
  BASE:
20
- location: 63-2
20
+ location_rv32: 31-2
21
+ location_rv64: 63-2
21
22
  description: |
22
- <%- va_size = ext?(:Sv57) ? 57 : (ext?(:Sv48) ? 49 :39) -%>
23
- Bit 63:0 of the virtual address of the exception vector for any trap taken into S-mode.
23
+ <%- va_size = ext?(:Sv57) ? 57 : (ext?(:Sv48) ? 48 : 39) -%>
24
+ Bits [SXLEN-1:2] of the virtual address of the exception vector for any trap taken into S-mode.
24
25
 
25
- If the base address is written with a non-cannonical address (_i.e._, bits 63:<%= va_size %> do not match bit <%= va_size-1 %>),
26
+ If the base address is written with a non-canonical address (_i.e._, bits [SXLEN-1:<%= va_size %>] do not match bit <%= va_size-1 %>),
26
27
  the write should be ignored.
27
28
 
28
29
  type: RW-R
@@ -41,14 +42,13 @@ fields:
41
42
 
42
43
  When Direct, all synchronous exceptions and asynchronous interrupts jump to (`stvec.BASE` << 2).
43
44
 
44
- When Vectored, asynchronous interrupts jump to (`stvec.BASE` << 2 + `scause.CAUSE`*4) while synchronous exceptions continue to jump to (`stvec.BASE` << 2).
45
- type: RW-R
45
+ When Vectored, asynchronous interrupts jump to (`stvec.BASE` << 2 + `scause.CODE`*4) while synchronous exceptions continue to jump to (`stvec.BASE` << 2).
46
+ type(): |
47
+ return ($array_size(STVEC_MODES) == 1) ? CsrFieldType::RO : CsrFieldType::RWR;
46
48
  sw_write(csr_value): |
47
- if (STVEC_MODE_DIRECT && csr_value.MODE == 0) {
48
- return 0;
49
- } else if (STVEC_MODE_VECTORED && csr_value.MODE == 1) {
50
- return 1;
51
- } else {
52
- return UNDEFINED_LEGAL_DETERMINISTIC;
49
+ if ($array_includes?(STVEC_MODES, csr_value.MODE)) {
50
+ return csr_value.MODE;
53
51
  }
54
- reset_value: 0
52
+ return UNDEFINED_LEGAL_DETERMINISTIC;
53
+ reset_value(): |
54
+ return ($array_size(STVEC_MODES) == 1) ? STVEC_MODES[0] : UNDEFINED_LEGAL;
@@ -79,7 +79,7 @@ sw_read(): |
79
79
  }
80
80
  } else if (mode() == PrivilegeMode::VU) {
81
81
  # access in VU mode
82
- if (((CSR[hcounteren].TM & CSR[scounteren].TM) == 1'b0) && (CSR[mcounteren].IR == 1'b1)) {
82
+ if (((CSR[hcounteren].TM & CSR[scounteren].TM) == 1'b0) && (CSR[mcounteren].TM == 1'b1)) {
83
83
  raise(ExceptionCode::VirtualInstruction, mode(), $encoding);
84
84
  } else if (CSR[mcounteren].TM == 1'b0) {
85
85
  raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
@@ -80,7 +80,7 @@ sw_read(): |
80
80
  }
81
81
  } else if (mode() == PrivilegeMode::VU) {
82
82
  # access in VU mode
83
- if (((CSR[hcounteren].TM & CSR[scounteren].TM) == 1'b0) && (CSR[mcounteren].IR == 1'b1)) {
83
+ if (((CSR[hcounteren].TM & CSR[scounteren].TM) == 1'b0) && (CSR[mcounteren].TM == 1'b1)) {
84
84
  raise(ExceptionCode::VirtualInstruction, mode(), $encoding);
85
85
  } else if (CSR[mcounteren].TM == 1'b0) {
86
86
  raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
@@ -11,7 +11,7 @@ address: 0x241
11
11
  writable: true
12
12
  virtual_address: 0x141
13
13
  priv_mode: VS
14
- length: 64
14
+ length: VSXLEN
15
15
  description: |
16
16
  Written with the PC of an instruction on an exception or interrupt taken in VS-mode.
17
17
 
@@ -21,7 +21,8 @@ definedBy:
21
21
  name: H
22
22
  fields:
23
23
  PC:
24
- location: 63-0
24
+ location_rv32: 31-0
25
+ location_rv64: 63-0
25
26
  description: |
26
27
  When a trap is taken into VS-mode, `vsepc.PC` is written with the virtual address of the
27
28
  instruction that was interrupted or that encountered the exception.
@@ -39,14 +40,14 @@ fields:
39
40
  When `misa.C` is clear, bit 1 is masked to zero. Writes to bit 1 are still captured, and
40
41
  may be visible on the next read with `misa.C` is set.
41
42
 
42
- Holds bits 63:<%= ext?(:C) ? 2 : 1 %> of the virtual address associated with an exception.
43
+ Holds bits [VSXLEN-1:<%= ext?(:C) ? 2 : 1 %>] of the virtual address associated with an exception.
43
44
  type: RW-RH
44
45
  sw_write(csr_value): |
45
46
  return csr_value.PC & ~64'b1;
46
47
  reset_value: UNDEFINED_LEGAL
47
48
  sw_read(): |
48
49
  if (implemented?(ExtensionName::C) && CSR[misa].C == 1'b1) {
49
- return CSR[sepc].PC & ~64'b1;
50
+ return CSR[vsepc].PC & ~64'b1;
50
51
  } else {
51
- return CSR[sepc].PC;
52
+ return CSR[vsepc].PC;
52
53
  }
@@ -11,7 +11,7 @@ address: 0x243
11
11
  writable: true
12
12
  virtual_address: 0x143
13
13
  description: Holds trap-specific information
14
- priv_mode: S
14
+ priv_mode: VS
15
15
  length: VSXLEN
16
16
  definedBy:
17
17
  extension: