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
@@ -0,0 +1,67 @@
1
+ # Copyright (c) Alibaba Damo Academy
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ # yaml-language-server: $schema=../../../../schemas/inst_schema.json
5
+
6
+ $schema: "inst_schema.json#"
7
+ kind: instruction
8
+ name: vabd.vv
9
+ long_name: Vector Single-Width Signed Integer Absolute Difference
10
+ description: |
11
+ Computes the element-wise absolute difference of two signed integer SEW-bit
12
+ source operands vs1 and vs2 and writes the result to vd according to mask vm.
13
+
14
+ Reserved when SEW is neither 8 nor 16.
15
+ definedBy:
16
+ extension:
17
+ name: Zvabd
18
+ assembly: vd, vs2, vs1, vm
19
+ encoding:
20
+ match: 010001-----------010-----1010111
21
+ variables:
22
+ - name: vm
23
+ location: 25
24
+ - name: vs2
25
+ location: 24-20
26
+ - name: vs1
27
+ location: 19-15
28
+ - name: vd
29
+ location: 11-7
30
+ access:
31
+ s: always
32
+ u: always
33
+ vs: always
34
+ vu: always
35
+ operation(): |
36
+ VectorState state = vector_state();
37
+
38
+ if (state.sew != 8 && state.sew != 16) {
39
+ raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
40
+ }
41
+
42
+ VectorLmulType lmul_type = state.lmul_type;
43
+
44
+ XReg vlen = VLEN;
45
+ XReg vlmax;
46
+ if (lmul_type == VectorLmulType::Multiply) {
47
+ vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
48
+ } else {
49
+ vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
50
+ }
51
+
52
+ for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
53
+ U32 start_bit_pos = i * state.sew;
54
+ U32 end_bit_pos = start_bit_pos + state.sew - 1;
55
+ if (vm == 1'b1 || V[0][i:i] == 1'b1) {
56
+ # active element
57
+ if ($signed(V[vs2][end_bit_pos:start_bit_pos]) >= $signed(V[vs1][end_bit_pos:start_bit_pos])) {
58
+ V[vd][end_bit_pos:start_bit_pos] = V[vs2][end_bit_pos:start_bit_pos] - V[vs1][end_bit_pos:start_bit_pos];
59
+ } else {
60
+ V[vd][end_bit_pos:start_bit_pos] = V[vs1][end_bit_pos:start_bit_pos] - V[vs2][end_bit_pos:start_bit_pos];
61
+ }
62
+ }
63
+ # inactive element: handled according to vtype.VMA policy
64
+ }
65
+ # tail elements (i >= vl): handled according to vtype.VTA policy
66
+
67
+ CSR[vstart].VALUE = 0;
@@ -0,0 +1,67 @@
1
+ # Copyright (c) Alibaba Damo Academy
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ # yaml-language-server: $schema=../../../../schemas/inst_schema.json
5
+
6
+ $schema: "inst_schema.json#"
7
+ kind: instruction
8
+ name: vabdu.vv
9
+ long_name: Vector Single-Width Unsigned Integer Absolute Difference
10
+ description: |
11
+ Computes the element-wise absolute difference of two unsigned integer SEW-bit
12
+ source operands vs1 and vs2 and writes the result to vd according to mask vm.
13
+
14
+ Reserved when SEW is neither 8 nor 16.
15
+ definedBy:
16
+ extension:
17
+ name: Zvabd
18
+ assembly: vd, vs2, vs1, vm
19
+ encoding:
20
+ match: 010011-----------010-----1010111
21
+ variables:
22
+ - name: vm
23
+ location: 25
24
+ - name: vs2
25
+ location: 24-20
26
+ - name: vs1
27
+ location: 19-15
28
+ - name: vd
29
+ location: 11-7
30
+ access:
31
+ s: always
32
+ u: always
33
+ vs: always
34
+ vu: always
35
+ operation(): |
36
+ VectorState state = vector_state();
37
+
38
+ if (state.sew != 8 && state.sew != 16) {
39
+ raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
40
+ }
41
+
42
+ VectorLmulType lmul_type = state.lmul_type;
43
+
44
+ XReg vlen = VLEN;
45
+ XReg vlmax;
46
+ if (lmul_type == VectorLmulType::Multiply) {
47
+ vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
48
+ } else {
49
+ vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
50
+ }
51
+
52
+ for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
53
+ U32 start_bit_pos = i * state.sew;
54
+ U32 end_bit_pos = start_bit_pos + state.sew - 1;
55
+ if (vm == 1'b1 || V[0][i:i] == 1'b1) {
56
+ # active element
57
+ if (V[vs2][end_bit_pos:start_bit_pos] >= V[vs1][end_bit_pos:start_bit_pos]) {
58
+ V[vd][end_bit_pos:start_bit_pos] = V[vs2][end_bit_pos:start_bit_pos] - V[vs1][end_bit_pos:start_bit_pos];
59
+ } else {
60
+ V[vd][end_bit_pos:start_bit_pos] = V[vs1][end_bit_pos:start_bit_pos] - V[vs2][end_bit_pos:start_bit_pos];
61
+ }
62
+ }
63
+ # inactive element: handled according to vtype.VMA policy
64
+ }
65
+ # tail elements (i >= vl): handled according to vtype.VTA policy
66
+
67
+ CSR[vstart].VALUE = 0;
@@ -0,0 +1,61 @@
1
+ # Copyright (c) Alibaba Damo Academy
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ # yaml-language-server: $schema=../../../../schemas/inst_schema.json
5
+
6
+ $schema: "inst_schema.json#"
7
+ kind: instruction
8
+ name: vabs.v
9
+ long_name: Vector Single-Width Signed Integer Absolute
10
+ description: |
11
+ An absolute value operation is performed on each element of vs2, storing the
12
+ result in vector register vd according to mask vm.
13
+
14
+ vabs.v supports SEW of 8, 16, and 32 when Zve32x is implemented.
15
+ When Zve64x is implemented, vabs.v also supports SEW of 64.
16
+ definedBy:
17
+ extension:
18
+ name: Zvabd
19
+ assembly: vd, vs2, vm
20
+ encoding:
21
+ match: 010010------10000010-----1010111
22
+ variables:
23
+ - name: vm
24
+ location: 25
25
+ - name: vs2
26
+ location: 24-20
27
+ - name: vd
28
+ location: 11-7
29
+ access:
30
+ s: always
31
+ u: always
32
+ vs: always
33
+ vu: always
34
+ operation(): |
35
+ VectorState state = vector_state();
36
+ VectorLmulType lmul_type = state.lmul_type;
37
+
38
+ XReg vlen = VLEN;
39
+ XReg vlmax;
40
+ if (lmul_type == VectorLmulType::Multiply) {
41
+ vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
42
+ } else {
43
+ vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
44
+ }
45
+
46
+ for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
47
+ U32 start_bit_pos = i * state.sew;
48
+ U32 end_bit_pos = start_bit_pos + state.sew - 1;
49
+ if (vm == 1'b1 || V[0][i:i] == 1'b1) {
50
+ # active element
51
+ if (V[vs2][end_bit_pos:end_bit_pos] == 1'b1) {
52
+ V[vd][end_bit_pos:start_bit_pos] = -$signed(V[vs2][end_bit_pos:start_bit_pos]);
53
+ } else {
54
+ V[vd][end_bit_pos:start_bit_pos] = V[vs2][end_bit_pos:start_bit_pos];
55
+ }
56
+ }
57
+ # inactive element: handled according to vtype.VMA policy
58
+ }
59
+ # tail elements (i >= vl): handled according to vtype.VTA policy
60
+
61
+ CSR[vstart].VALUE = 0;
@@ -0,0 +1,72 @@
1
+ # Copyright (c) Alibaba Damo Academy
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ # yaml-language-server: $schema=../../../../schemas/inst_schema.json
5
+
6
+ $schema: "inst_schema.json#"
7
+ kind: instruction
8
+ name: vwabda.vv
9
+ long_name: Vector Widening Signed Integer Absolute Difference and Accumulate, Overwrite Addend
10
+ description: |
11
+ Computes the element-wise absolute difference of two signed integer SEW-bit
12
+ source operands vs1 and vs2, and accumulates the results into the elements of
13
+ a 2*SEW-bit operand vd.
14
+
15
+ Reserved when SEW is neither 8 nor 16.
16
+ definedBy:
17
+ extension:
18
+ name: Zvabd
19
+ assembly: vd, vs2, vs1, vm
20
+ encoding:
21
+ match: 010101-----------010-----1010111
22
+ variables:
23
+ - name: vm
24
+ location: 25
25
+ - name: vs2
26
+ location: 24-20
27
+ - name: vs1
28
+ location: 19-15
29
+ - name: vd
30
+ location: 11-7
31
+ access:
32
+ s: always
33
+ u: always
34
+ vs: always
35
+ vu: always
36
+ operation(): |
37
+ VectorState state = vector_state();
38
+
39
+ if (state.sew != 8 && state.sew != 16) {
40
+ raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
41
+ }
42
+
43
+ VectorLmulType lmul_type = state.lmul_type;
44
+
45
+ XReg vlen = VLEN;
46
+ XReg vlmax;
47
+ if (lmul_type == VectorLmulType::Multiply) {
48
+ vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
49
+ } else {
50
+ vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
51
+ }
52
+
53
+ U32 sew2 = state.sew + state.sew;
54
+
55
+ for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
56
+ U32 src_start = i * state.sew;
57
+ U32 src_end = src_start + state.sew - 1;
58
+ U32 dst_start = i * sew2;
59
+ U32 dst_end = dst_start + sew2 - 1;
60
+ if (vm == 1'b1 || V[0][i:i] == 1'b1) {
61
+ # active element
62
+ if ($signed(V[vs2][src_end:src_start]) >= $signed(V[vs1][src_end:src_start])) {
63
+ V[vd][dst_end:dst_start] = V[vd][dst_end:dst_start] + (V[vs2][src_end:src_start] - V[vs1][src_end:src_start]);
64
+ } else {
65
+ V[vd][dst_end:dst_start] = V[vd][dst_end:dst_start] + (V[vs1][src_end:src_start] - V[vs2][src_end:src_start]);
66
+ }
67
+ }
68
+ # inactive element: handled according to vtype.VMA policy
69
+ }
70
+ # tail elements (i >= vl): handled according to vtype.VTA policy
71
+
72
+ CSR[vstart].VALUE = 0;
@@ -0,0 +1,72 @@
1
+ # Copyright (c) Alibaba Damo Academy
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ # yaml-language-server: $schema=../../../../schemas/inst_schema.json
5
+
6
+ $schema: "inst_schema.json#"
7
+ kind: instruction
8
+ name: vwabdau.vv
9
+ long_name: Vector Widening Unsigned Integer Absolute Difference and Accumulate, Overwrite Addend
10
+ description: |
11
+ Computes the element-wise absolute difference of two unsigned integer SEW-bit
12
+ source operands vs1 and vs2, and accumulates the results into the elements of
13
+ a 2*SEW-bit operand vd.
14
+
15
+ Reserved when SEW is neither 8 nor 16.
16
+ definedBy:
17
+ extension:
18
+ name: Zvabd
19
+ assembly: vd, vs2, vs1, vm
20
+ encoding:
21
+ match: 010110-----------010-----1010111
22
+ variables:
23
+ - name: vm
24
+ location: 25
25
+ - name: vs2
26
+ location: 24-20
27
+ - name: vs1
28
+ location: 19-15
29
+ - name: vd
30
+ location: 11-7
31
+ access:
32
+ s: always
33
+ u: always
34
+ vs: always
35
+ vu: always
36
+ operation(): |
37
+ VectorState state = vector_state();
38
+
39
+ if (state.sew != 8 && state.sew != 16) {
40
+ raise(ExceptionCode::IllegalInstruction, mode(), $encoding);
41
+ }
42
+
43
+ VectorLmulType lmul_type = state.lmul_type;
44
+
45
+ XReg vlen = VLEN;
46
+ XReg vlmax;
47
+ if (lmul_type == VectorLmulType::Multiply) {
48
+ vlmax = (vlen << state.log2_lmul) >> state.log2_sew;
49
+ } else {
50
+ vlmax = (vlen >> state.log2_lmul) >> state.log2_sew;
51
+ }
52
+
53
+ U32 sew2 = state.sew + state.sew;
54
+
55
+ for (U32 i = CSR[vstart].VALUE; i < CSR[vl].VALUE; i++) {
56
+ U32 src_start = i * state.sew;
57
+ U32 src_end = src_start + state.sew - 1;
58
+ U32 dst_start = i * sew2;
59
+ U32 dst_end = dst_start + sew2 - 1;
60
+ if (vm == 1'b1 || V[0][i:i] == 1'b1) {
61
+ # active element
62
+ if (V[vs2][src_end:src_start] >= V[vs1][src_end:src_start]) {
63
+ V[vd][dst_end:dst_start] = V[vd][dst_end:dst_start] + (V[vs2][src_end:src_start] - V[vs1][src_end:src_start]);
64
+ } else {
65
+ V[vd][dst_end:dst_start] = V[vd][dst_end:dst_start] + (V[vs1][src_end:src_start] - V[vs2][src_end:src_start]);
66
+ }
67
+ }
68
+ # inactive element: handled according to vtype.VMA policy
69
+ }
70
+ # tail elements (i >= vl): handled according to vtype.VTA policy
71
+
72
+ CSR[vstart].VALUE = 0;
@@ -11,7 +11,7 @@ description: |
11
11
  Performs a bitwise AND operation between vector register vs2 and the bitwise NOT of vector register vs1, storing results in vector register vd according to mask vm.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vs1, vm
16
16
  encoding:
17
17
  match: 000001-----------000-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Performs a bitwise AND operation between vector register vs2 and the bitwise NOT of scalar register xs1, storing results in vector register vd according to mask vm.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, xs1, vm
16
16
  encoding:
17
17
  match: 000001-----------100-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Reverses the byte order within each element of vector register vs2, storing results in vector register vd according to mask vm. Similar to vrev8.v but with different encoding.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vm
16
16
  encoding:
17
17
  match: 010010------01000010-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Reverses the byte order within each element of vector register vs2, storing results in vector register vd according to mask vm. This is equivalent to a byte-level reversal of each element.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vm
16
16
  encoding:
17
17
  match: 010010------01001010-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 left by the amount specified in vector register vs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vs1, vm
16
16
  encoding:
17
17
  match: 010101-----------000-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 left by the amount specified in scalar register xs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, xs1, vm
16
16
  encoding:
17
17
  match: 010101-----------100-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 right by the immediate shift amount, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, imm, vm
16
16
  encoding:
17
17
  match: 01010------------011-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 right by the amount specified in vector register vs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vs1, vm
16
16
  encoding:
17
17
  match: 010100-----------000-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 right by the amount specified in scalar register xs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, xs1, vm
16
16
  encoding:
17
17
  match: 010100-----------100-----1010111
@@ -405,6 +405,9 @@ function f32_muladd {
405
405
  Translated from Berkeley Softfloat softfloat_mulAddF32.
406
406
  }
407
407
  body {
408
+ if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b) || is_sp_signaling_nan?(c)) {
409
+ set_fp_flag(FpFlag::NV);
410
+ }
408
411
  Bits<1> signA = signF32UI(a);
409
412
  Bits<16> expA = expF32UI(a);
410
413
  Bits<32> sigA = fracF32UI(a);
@@ -584,8 +587,11 @@ function f32_sqrt {
584
587
  Translated from Berkeley Softfloat f32_sqrt.
585
588
  }
586
589
  body {
590
+ if (is_sp_signaling_nan?(a)) {
591
+ set_fp_flag(FpFlag::NV);
592
+ }
587
593
  Bits<1> signA = signF32UI(a);
588
- Bits<8> expA = expF32UI(a);
594
+ Bits<16> expA = expF32UI(a);
589
595
  Bits<32> fracA = fracF32UI(a);
590
596
 
591
597
  if (expA == 8'hFF) {
@@ -606,7 +612,8 @@ function f32_sqrt {
606
612
  fracA = norm.sig;
607
613
  }
608
614
 
609
- Bits<16> expZ = ((expA - 16'h007F) >> 1) + 16'h007E;
615
+ Bits<16> adjExp = expA - 16'h007F;
616
+ Bits<16> expZ = ((adjExp >> 1) ^ (adjExp & 16'h8000)) + 16'h007E;
610
617
  Bits<1> oddExpA = expA[0];
611
618
  Bits<32> sigA32 = (fracA | 32'h00800000) << 8;
612
619
  Bits<32> sigZ = (sigA32 `* softfloat_approxRecipSqrt32_1(oddExpA, sigA32)) >> 32;
@@ -653,19 +660,22 @@ function softfloat_approxRecip32_1 {
653
660
  arguments
654
661
  Bits<32> a
655
662
  description {
656
- Returns a 32-bit approximation of 1/a, where a is in [1, 2).
657
- Translated from Berkeley Softfloat softfloat_approxRecip32_1.
663
+ Returns floor(0x7FFFFFFFFFFFFFFF / a), matching the platform-specific
664
+ Berkeley SoftFloat macro on 64-bit hosts. Computed via binary long division.
658
665
  }
659
666
  body {
660
- Bits<32> index = (a >> 27) & 0xF;
661
- Bits<16> eps = a >> 11;
662
- Bits<32> r0 = softfloat_approxRecip_1k0s[index]
663
- - ((softfloat_approxRecip_1k1s[index] `* eps) >> 20);
664
- Bits<32> sigma0 = ~((r0 `* a) >> 7);
665
- Bits<32> r = (r0 << 16) + ((r0 `* sigma0) >> 24);
666
- Bits<32> sqrSigma0 = (sigma0 `* sigma0) >> 32;
667
- r = r + ((r `* sqrSigma0) >> 48);
668
- return r;
667
+ Bits<64> a64 = {32'h0, a};
668
+ Bits<64> a_top = a64 << 31;
669
+ Bits<64> rem = 64'h7FFFFFFFFFFFFFFF;
670
+ Bits<32> q = 0;
671
+ for (U32 i = 0; i < 32; i++) {
672
+ Bits<64> d = a_top >> i;
673
+ if (rem >= d) {
674
+ q = q | (32'h1 << (31 - i));
675
+ rem = rem - d;
676
+ }
677
+ }
678
+ return q;
669
679
  }
670
680
  }
671
681
 
@@ -710,6 +720,9 @@ function f32_div {
710
720
  Translated from Berkeley Softfloat f32_div.
711
721
  }
712
722
  body {
723
+ if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b)) {
724
+ set_fp_flag(FpFlag::NV);
725
+ }
713
726
  Bits<1> signA = signF32UI(a);
714
727
  Bits<16> expA = expF32UI(a);
715
728
  Bits<32> sigA = fracF32UI(a);
@@ -771,7 +784,7 @@ function f32_div {
771
784
  Bits<32> sigZ = (sigA `* recip32) >> 32;
772
785
  sigZ = sigZ + 2;
773
786
 
774
- if ((sigZ & 0x3F) < 2) {
787
+ if ((sigZ & 7) <= 2) {
775
788
  sigZ = sigZ & ~32'h3;
776
789
  Bits<64> rem = (sigA `<< 31) - (sigZ `* sigB);
777
790
  if ((rem & 64'h8000000000000000) != 0) {
@@ -798,6 +811,9 @@ function f32_mul {
798
811
  Translated from Berkeley Softfloat f32_mul.
799
812
  }
800
813
  body {
814
+ if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b)) {
815
+ set_fp_flag(FpFlag::NV);
816
+ }
801
817
  Bits<1> signA = signF32UI(a);
802
818
  Bits<16> expA = expF32UI(a);
803
819
  Bits<23> fracA = fracF32UI(a);
@@ -1326,6 +1342,9 @@ function softfloat_addMagsF32 {
1326
1342
  Returns sum of the magnitudes of 2 floating point numbers
1327
1343
  }
1328
1344
  body {
1345
+ if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b)) {
1346
+ set_fp_flag(FpFlag::NV);
1347
+ }
1329
1348
 
1330
1349
  # extract exponents and significands of a and b
1331
1350
  Bits<16> expA = expF32UI(a);
@@ -1433,6 +1452,9 @@ function softfloat_subMagsF32 {
1433
1452
  Returns difference of the magnitudes of 2 floating point numbers
1434
1453
  }
1435
1454
  body {
1455
+ if (is_sp_signaling_nan?(a) || is_sp_signaling_nan?(b)) {
1456
+ set_fp_flag(FpFlag::NV);
1457
+ }
1436
1458
 
1437
1459
  # extract exponents and significands of a and b
1438
1460
  Bits<16> expA = expF32UI(a);
@@ -1886,7 +1908,7 @@ function round_f32_to_integral {
1886
1908
  }
1887
1909
 
1888
1910
  struct ExpAndSig {
1889
- Bits<8> exp;
1911
+ Bits<16> exp;
1890
1912
  Bits<32> sig;
1891
1913
  }
1892
1914
 
@@ -1897,11 +1919,13 @@ function softfloat_normSubnormalF32Sig {
1897
1919
  description {
1898
1920
  Normalize a subnormal F32 significand.
1899
1921
  Returns (exp, sig32) where exp is the adjusted exponent (two's complement
1900
- in Bits<8>) and sig32 is the normalized significand with implicit leading 1
1901
- at bit 23.
1922
+ in Bits<16>) and sig32 is the normalized significand with implicit leading 1
1923
+ at bit 23. The exponent is widened to Bits<16> (rather than the natural
1924
+ Bits<8>) so that callers can add two adjusted exponents together (e.g.
1925
+ expA + expB - bias) without overflow.
1902
1926
  }
1903
1927
  body {
1904
- Bits<8> shiftDist = count_leading_zeros(32, sig) - 8;
1928
+ Bits<16> shiftDist = count_leading_zeros(32, sig) - 8;
1905
1929
  ExpAndSig ret;
1906
1930
  ret.exp = 1 - shiftDist;
1907
1931
  ret.sig = sig << shiftDist;
@@ -3144,7 +3144,7 @@ function mstatus_sd_reset_value
3144
3144
  fs_value = (!implemented?(ExtensionName::F)) ? 0 : MSTATUS_FS_LEGAL_VALUES[0];
3145
3145
  }
3146
3146
  if ((!implemented?(ExtensionName::V)) || ($array_size(MSTATUS_VS_LEGAL_VALUES) == 1)) {
3147
- fs_value = (!implemented?(ExtensionName::V)) ? 0 : MSTATUS_VS_LEGAL_VALUES[0];
3147
+ vs_value = (!implemented?(ExtensionName::V)) ? 0 : MSTATUS_VS_LEGAL_VALUES[0];
3148
3148
  }
3149
3149
 
3150
3150
  return ((fs_value == 3) || (vs_value == 3)) ? 1 : 0;
@@ -73,9 +73,9 @@ function highest_set_bit {
73
73
  or -1 if value is zero.
74
74
  }
75
75
  body {
76
- for (Bits<8> i=xlen()-1; i >= 0; i--) {
77
- if (value[i] == 1) {
78
- return i;
76
+ for (Bits<8> i=xlen(); i > 0; i--) {
77
+ if (value[i-1] == 1) {
78
+ return i-1;
79
79
  }
80
80
  }
81
81
 
@@ -6,14 +6,78 @@
6
6
  $schema: param_schema.json#
7
7
  kind: parameter
8
8
  name: CACHE_BLOCK_SIZE
9
- description: "The observable size of a cache block, in bytes
10
-
11
- "
12
- long_name: TODO
9
+ description: The observable size of a cache block, in bytes. A cache block is a
10
+ naturally aligned power-of-two (NAPOT) range of memory.
11
+ long_name: cache block size
13
12
  schema:
14
13
  type: integer
15
- minimum: 1
16
- maximum: 18446744073709551615
14
+ enum:
15
+ [
16
+ 0x1,
17
+ 0x2,
18
+ 0x4,
19
+ 0x8,
20
+ 0x10,
21
+ 0x20,
22
+ 0x40,
23
+ 0x80,
24
+ 0x100,
25
+ 0x200,
26
+ 0x400,
27
+ 0x800,
28
+ 0x1000,
29
+ 0x2000,
30
+ 0x4000,
31
+ 0x8000,
32
+ 0x10000,
33
+ 0x20000,
34
+ 0x40000,
35
+ 0x80000,
36
+ 0x100000,
37
+ 0x200000,
38
+ 0x400000,
39
+ 0x800000,
40
+ 0x1000000,
41
+ 0x2000000,
42
+ 0x4000000,
43
+ 0x8000000,
44
+ 0x10000000,
45
+ 0x20000000,
46
+ 0x40000000,
47
+ 0x80000000,
48
+ 0x100000000,
49
+ 0x200000000,
50
+ 0x400000000,
51
+ 0x800000000,
52
+ 0x1000000000,
53
+ 0x2000000000,
54
+ 0x4000000000,
55
+ 0x8000000000,
56
+ 0x10000000000,
57
+ 0x20000000000,
58
+ 0x40000000000,
59
+ 0x80000000000,
60
+ 0x100000000000,
61
+ 0x200000000000,
62
+ 0x400000000000,
63
+ 0x800000000000,
64
+ 0x1000000000000,
65
+ 0x2000000000000,
66
+ 0x4000000000000,
67
+ 0x8000000000000,
68
+ 0x10000000000000,
69
+ 0x20000000000000,
70
+ 0x40000000000000,
71
+ 0x80000000000000,
72
+ 0x100000000000000,
73
+ 0x200000000000000,
74
+ 0x400000000000000,
75
+ 0x800000000000000,
76
+ 0x1000000000000000,
77
+ 0x2000000000000000,
78
+ 0x4000000000000000,
79
+ 0x8000000000000000,
80
+ ]
17
81
  definedBy:
18
82
  extension:
19
83
  anyOf: