udb 0.1.14 → 0.1.15

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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/.data/cfgs/example_rv64_with_overlay.yaml +5 -6
  3. data/.data/cfgs/mc100-32-full-example.yaml +2 -2
  4. data/.data/cfgs/qc_iu.yaml +2 -2
  5. data/.data/cfgs/rv32-riscv-tests.yaml +4 -4
  6. data/.data/cfgs/rv32-vector.yaml +4 -4
  7. data/.data/cfgs/rv64-riscv-tests.yaml +4 -4
  8. data/.data/cfgs/rv64-vector.yaml +4 -4
  9. data/.data/spec/schemas/README.adoc +3 -0
  10. data/.data/spec/schemas/schema_defs.json +3 -3
  11. data/.data/spec/std/isa/csr/H/hcounteren.layout +3 -3
  12. data/.data/spec/std/isa/csr/H/hcounteren.yaml +31 -31
  13. data/.data/spec/std/isa/csr/H/htinst.yaml +3 -3
  14. data/.data/spec/std/isa/csr/H/htval.yaml +3 -3
  15. data/.data/spec/std/isa/csr/H/mtinst.yaml +1 -1
  16. data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfg.yaml +1 -1
  17. data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfgh.yaml +1 -1
  18. data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfg.yaml +1 -1
  19. data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfgh.yaml +1 -1
  20. data/.data/spec/std/isa/csr/Sscofpmf/scountovf.layout +1 -1
  21. data/.data/spec/std/isa/csr/Sscofpmf/scountovf.yaml +29 -29
  22. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10.yaml +4 -4
  23. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10h.yaml +1 -1
  24. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11.yaml +4 -4
  25. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11h.yaml +1 -1
  26. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12.yaml +4 -4
  27. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12h.yaml +1 -1
  28. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13.yaml +4 -4
  29. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13h.yaml +1 -1
  30. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14.yaml +4 -4
  31. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14h.yaml +1 -1
  32. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15.yaml +4 -4
  33. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15h.yaml +1 -1
  34. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16.yaml +4 -4
  35. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16h.yaml +1 -1
  36. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17.yaml +4 -4
  37. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17h.yaml +1 -1
  38. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18.yaml +4 -4
  39. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18h.yaml +1 -1
  40. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19.yaml +4 -4
  41. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19h.yaml +1 -1
  42. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20.yaml +4 -4
  43. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20h.yaml +1 -1
  44. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21.yaml +4 -4
  45. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21h.yaml +1 -1
  46. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22.yaml +4 -4
  47. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22h.yaml +1 -1
  48. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23.yaml +4 -4
  49. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23h.yaml +1 -1
  50. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24.yaml +4 -4
  51. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24h.yaml +1 -1
  52. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25.yaml +4 -4
  53. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25h.yaml +1 -1
  54. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26.yaml +4 -4
  55. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26h.yaml +1 -1
  56. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27.yaml +4 -4
  57. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27h.yaml +1 -1
  58. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28.yaml +4 -4
  59. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28h.yaml +1 -1
  60. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29.yaml +4 -4
  61. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29h.yaml +1 -1
  62. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3.yaml +4 -4
  63. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30.yaml +4 -4
  64. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30h.yaml +1 -1
  65. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31.yaml +4 -4
  66. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31h.yaml +1 -1
  67. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3h.yaml +1 -1
  68. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4.yaml +4 -4
  69. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4h.yaml +1 -1
  70. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5.yaml +4 -4
  71. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5h.yaml +1 -1
  72. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6.yaml +4 -4
  73. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6h.yaml +1 -1
  74. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7.yaml +4 -4
  75. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7h.yaml +1 -1
  76. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8.yaml +4 -4
  77. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8h.yaml +1 -1
  78. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9.yaml +4 -4
  79. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9h.yaml +1 -1
  80. data/.data/spec/std/isa/csr/Zihpm/mhpmcounterN.layout +4 -4
  81. data/.data/spec/std/isa/csr/Zihpm/mhpmcounterNh.layout +1 -1
  82. data/.data/spec/std/isa/csr/hstatus.yaml +1 -1
  83. data/.data/spec/std/isa/csr/mcycle.yaml +6 -6
  84. data/.data/spec/std/isa/csr/minstret.yaml +3 -3
  85. data/.data/spec/std/isa/csr/minstreth.yaml +1 -1
  86. data/.data/spec/std/isa/csr/mstatus.yaml +13 -19
  87. data/.data/spec/std/isa/csr/mtvec.yaml +16 -57
  88. data/.data/spec/std/isa/csr/sie.yaml +30 -4
  89. data/.data/spec/std/isa/csr/sip.yaml +16 -2
  90. data/.data/spec/std/isa/csr/stvec.yaml +11 -12
  91. data/.data/spec/std/isa/csr/vstval.yaml +1 -1
  92. data/.data/spec/std/isa/csr/vstvec.yaml +14 -15
  93. data/.data/spec/std/isa/ext/Q.yaml +1 -1
  94. data/.data/spec/std/isa/ext/Shlcofideleg.yaml +24 -0
  95. data/.data/spec/std/isa/ext/Shvstvecd.yaml +2 -2
  96. data/.data/spec/std/isa/ext/Sspm.yaml +5 -0
  97. data/.data/spec/std/isa/ext/Sstvecd.yaml +2 -2
  98. data/.data/spec/std/isa/ext/Sstvecv.yaml +2 -2
  99. data/.data/spec/std/isa/ext/Supm.yaml +17 -0
  100. data/.data/spec/std/isa/ext/Zcb.yaml +3 -0
  101. data/.data/spec/std/isa/ext/Zfbfmin.yaml +3 -5
  102. data/.data/spec/std/isa/ext/Ziccid.yaml +29 -0
  103. data/.data/spec/std/isa/ext/Zicfilp.yaml +5 -1
  104. data/.data/spec/std/isa/ext/Zicfiss.yaml +20 -1
  105. data/.data/spec/std/isa/ext/Zihpm.yaml +3 -0
  106. data/.data/spec/std/isa/ext/Zilx.yaml +58 -0
  107. data/.data/spec/std/isa/ext/Zkt.yaml +33 -1
  108. data/.data/spec/std/isa/ext/Zvabd.yaml +21 -0
  109. data/.data/spec/std/isa/ext/Zvbc.yaml +3 -0
  110. data/.data/spec/std/isa/ext/Zvkb.yaml +3 -0
  111. data/.data/spec/std/isa/ext/Zvkg.yaml +3 -0
  112. data/.data/spec/std/isa/ext/Zvkned.yaml +3 -0
  113. data/.data/spec/std/isa/ext/Zvknha.yaml +3 -0
  114. data/.data/spec/std/isa/ext/Zvknhb.yaml +4 -2
  115. data/.data/spec/std/isa/ext/Zvksed.yaml +3 -0
  116. data/.data/spec/std/isa/ext/Zvksh.yaml +3 -0
  117. data/.data/spec/std/isa/ext/Zvkt.yaml +3 -0
  118. data/.data/spec/std/isa/inst/C/c.add.yaml +1 -0
  119. data/.data/spec/std/isa/inst/C/c.addi.yaml +1 -0
  120. data/.data/spec/std/isa/inst/C/c.addiw.yaml +1 -0
  121. data/.data/spec/std/isa/inst/C/c.addw.yaml +1 -0
  122. data/.data/spec/std/isa/inst/C/c.and.yaml +1 -0
  123. data/.data/spec/std/isa/inst/C/c.andi.yaml +1 -0
  124. data/.data/spec/std/isa/inst/C/c.lui.yaml +1 -0
  125. data/.data/spec/std/isa/inst/C/c.mv.yaml +1 -0
  126. data/.data/spec/std/isa/inst/C/c.nop.yaml +13 -2
  127. data/.data/spec/std/isa/inst/C/c.or.yaml +1 -0
  128. data/.data/spec/std/isa/inst/C/c.slli.yaml +1 -0
  129. data/.data/spec/std/isa/inst/C/c.srai.yaml +1 -0
  130. data/.data/spec/std/isa/inst/C/c.srli.yaml +1 -0
  131. data/.data/spec/std/isa/inst/C/c.sub.yaml +1 -0
  132. data/.data/spec/std/isa/inst/C/c.subw.yaml +1 -0
  133. data/.data/spec/std/isa/inst/C/c.xor.yaml +1 -0
  134. data/.data/spec/std/isa/inst/D/fld.yaml +1 -0
  135. data/.data/spec/std/isa/inst/D/fsd.yaml +1 -0
  136. data/.data/spec/std/isa/inst/F/fadd.s.yaml +1 -1
  137. data/.data/spec/std/isa/inst/F/fcvt.l.s.yaml +1 -1
  138. data/.data/spec/std/isa/inst/F/fcvt.lu.s.yaml +1 -1
  139. data/.data/spec/std/isa/inst/F/fcvt.s.l.yaml +1 -1
  140. data/.data/spec/std/isa/inst/F/fcvt.s.lu.yaml +1 -1
  141. data/.data/spec/std/isa/inst/F/fcvt.s.wu.yaml +1 -1
  142. data/.data/spec/std/isa/inst/F/fcvt.w.s.yaml +1 -1
  143. data/.data/spec/std/isa/inst/F/fcvt.wu.s.yaml +1 -1
  144. data/.data/spec/std/isa/inst/F/fdiv.s.yaml +1 -1
  145. data/.data/spec/std/isa/inst/F/feq.s.yaml +1 -1
  146. data/.data/spec/std/isa/inst/F/fle.s.yaml +1 -1
  147. data/.data/spec/std/isa/inst/F/fleq.s.yaml +1 -1
  148. data/.data/spec/std/isa/inst/F/flt.s.yaml +1 -1
  149. data/.data/spec/std/isa/inst/F/fltq.s.yaml +1 -1
  150. data/.data/spec/std/isa/inst/F/flw.yaml +2 -1
  151. data/.data/spec/std/isa/inst/F/fmadd.s.yaml +1 -1
  152. data/.data/spec/std/isa/inst/F/fmax.s.yaml +1 -1
  153. data/.data/spec/std/isa/inst/F/fmin.s.yaml +1 -1
  154. data/.data/spec/std/isa/inst/F/fmsub.s.yaml +1 -1
  155. data/.data/spec/std/isa/inst/F/fmul.s.yaml +1 -1
  156. data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +1 -1
  157. data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +1 -1
  158. data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +1 -1
  159. data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +1 -1
  160. data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +1 -1
  161. data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +1 -1
  162. data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +1 -1
  163. data/.data/spec/std/isa/inst/F/fsqrt.s.yaml +1 -1
  164. data/.data/spec/std/isa/inst/F/fsub.s.yaml +1 -1
  165. data/.data/spec/std/isa/inst/F/fsw.yaml +2 -1
  166. data/.data/spec/std/isa/inst/I/sd.yaml +1 -1
  167. data/.data/spec/std/isa/inst/Q/fadd.q.yaml +2 -2
  168. data/.data/spec/std/isa/inst/Q/fclass.q.yaml +5 -5
  169. data/.data/spec/std/isa/inst/Q/fleq.q.yaml +0 -1
  170. data/.data/spec/std/isa/inst/Q/fli.q.yaml +1 -1
  171. data/.data/spec/std/isa/inst/Q/flq.yaml +1 -0
  172. data/.data/spec/std/isa/inst/Q/fltq.q.yaml +0 -1
  173. data/.data/spec/std/isa/inst/Q/fmaxm.q.yaml +0 -1
  174. data/.data/spec/std/isa/inst/Q/fminm.q.yaml +0 -1
  175. data/.data/spec/std/isa/inst/Q/fmvp.q.x.yaml +1 -1
  176. data/.data/spec/std/isa/inst/Q/fsq.yaml +1 -0
  177. data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +1 -0
  178. data/.data/spec/std/isa/inst/Zcb/c.mul.yaml +1 -0
  179. data/.data/spec/std/isa/inst/Zcb/c.not.yaml +1 -0
  180. data/.data/spec/std/isa/inst/Zcb/c.zext.b.yaml +2 -7
  181. data/.data/spec/std/isa/inst/Zcb/c.zext.w.yaml +1 -1
  182. data/.data/spec/std/isa/inst/Zcmop/c.mop.1.yaml +2 -0
  183. data/.data/spec/std/isa/inst/Zcmop/c.mop.5.yaml +2 -0
  184. data/.data/spec/std/isa/inst/Zcmop/c.mop.N.layout +7 -0
  185. data/.data/spec/std/isa/inst/Zfa/fli.s.yaml +1 -1
  186. data/.data/spec/std/isa/inst/Zfa/fmaxm.s.yaml +1 -1
  187. data/.data/spec/std/isa/inst/Zfa/fminm.s.yaml +1 -1
  188. data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +1 -1
  189. data/.data/spec/std/isa/inst/Zfa/froundnx.s.yaml +1 -1
  190. data/.data/spec/std/isa/inst/Zfh/flh.yaml +5 -2
  191. data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +3 -1
  192. data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +3 -1
  193. data/.data/spec/std/isa/inst/Zfh/fsh.yaml +4 -1
  194. data/.data/spec/std/isa/inst/Zicfiss/c.sspopchk.yaml +30 -0
  195. data/.data/spec/std/isa/inst/Zicfiss/c.sspush.yaml +29 -0
  196. data/.data/spec/std/isa/inst/Zicond/czero.eqz.yaml +1 -1
  197. data/.data/spec/std/isa/inst/Zicond/czero.nez.yaml +1 -1
  198. data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +12 -0
  199. data/.data/spec/std/isa/inst/Zilx/lxd.yaml +38 -0
  200. data/.data/spec/std/isa/inst/Zilx/lxh.yaml +35 -0
  201. data/.data/spec/std/isa/inst/Zilx/lxhu.yaml +35 -0
  202. data/.data/spec/std/isa/inst/Zilx/lxsb.yaml +40 -0
  203. data/.data/spec/std/isa/inst/Zilx/lxsbu.yaml +40 -0
  204. data/.data/spec/std/isa/inst/Zilx/lxsd.yaml +38 -0
  205. data/.data/spec/std/isa/inst/Zilx/lxsh.yaml +35 -0
  206. data/.data/spec/std/isa/inst/Zilx/lxshu.yaml +35 -0
  207. data/.data/spec/std/isa/inst/Zilx/lxsuwb.yaml +40 -0
  208. data/.data/spec/std/isa/inst/Zilx/lxsuwbu.yaml +40 -0
  209. data/.data/spec/std/isa/inst/Zilx/lxsuwd.yaml +39 -0
  210. data/.data/spec/std/isa/inst/Zilx/lxsuwh.yaml +40 -0
  211. data/.data/spec/std/isa/inst/Zilx/lxsuwhu.yaml +40 -0
  212. data/.data/spec/std/isa/inst/Zilx/lxsuww.yaml +40 -0
  213. data/.data/spec/std/isa/inst/Zilx/lxsuwwu.yaml +40 -0
  214. data/.data/spec/std/isa/inst/Zilx/lxsw.yaml +35 -0
  215. data/.data/spec/std/isa/inst/Zilx/lxswu.yaml +39 -0
  216. data/.data/spec/std/isa/inst/Zilx/lxw.yaml +35 -0
  217. data/.data/spec/std/isa/inst/Zilx/lxwu.yaml +39 -0
  218. data/.data/spec/std/isa/inst/Zvabd/vabd.vv.yaml +67 -0
  219. data/.data/spec/std/isa/inst/Zvabd/vabdu.vv.yaml +67 -0
  220. data/.data/spec/std/isa/inst/Zvabd/vabs.v.yaml +61 -0
  221. data/.data/spec/std/isa/inst/Zvabd/vwabda.vv.yaml +72 -0
  222. data/.data/spec/std/isa/inst/Zvabd/vwabdau.vv.yaml +72 -0
  223. data/.data/spec/std/isa/isa/fp.idl +42 -18
  224. data/.data/spec/std/isa/param/CACHE_BLOCK_SIZE.yaml +70 -6
  225. data/.data/spec/std/isa/param/ELEN.yaml +27 -5
  226. data/.data/spec/std/isa/param/HCOUNTENABLE_EN.yaml +13 -0
  227. data/.data/spec/std/isa/param/HPM_COUNTER_EN.yaml +13 -3
  228. data/.data/spec/std/isa/param/HPM_EVENTS.yaml +0 -3
  229. data/.data/spec/std/isa/param/MCOUNTENABLE_EN.yaml +8 -0
  230. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_DIRECT.yaml +71 -65
  231. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_VECTORED.yaml +71 -65
  232. data/.data/spec/std/isa/param/STVAL_WIDTH.yaml +3 -2
  233. data/.data/spec/std/isa/param/STVEC_BASE_ALIGNMENT_VECTORED.yaml +100 -0
  234. data/.data/spec/std/isa/param/STVEC_MODES.yaml +31 -0
  235. data/.data/spec/std/isa/param/SV32_VSMODE_TRANSLATION.yaml +1 -1
  236. data/.data/spec/std/isa/param/SXLEN.yaml +2 -2
  237. data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_INSTRUCTION_GUEST_PAGE_FAULT.yaml +1 -1
  238. data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_LOAD_GUEST_PAGE_FAULT.yaml +1 -1
  239. data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_STORE_AMO_GUEST_PAGE_FAULT.yaml +1 -1
  240. data/.data/spec/std/isa/param/TINST_VALUE_ON_LOAD_ADDRESS_MISALIGNED.yaml +1 -1
  241. data/.data/spec/std/isa/param/TINST_VALUE_ON_STORE_AMO_ADDRESS_MISALIGNED.yaml +1 -1
  242. data/.data/spec/std/isa/param/UXLEN.yaml +1 -1
  243. data/.data/spec/std/isa/param/VLEN.yaml +16 -7
  244. data/.data/spec/std/isa/param/VSTVEC_MODES.yaml +31 -0
  245. data/lib/udb/Z3_VERSION +1 -1
  246. data/lib/udb/obj/csr.rb +1 -1
  247. data/lib/udb/obj/csr_field.rb +1 -1
  248. data/lib/udb/obj/extension.rb +1 -1
  249. data/lib/udb/version.rb +1 -1
  250. data/lib/udb/version_spec.rb +1 -1
  251. data/lib/udb/z3.rb +29 -7
  252. metadata +37 -8
  253. data/.data/spec/std/isa/param/STVEC_MODE_DIRECT.yaml +0 -21
  254. data/.data/spec/std/isa/param/STVEC_MODE_VECTORED.yaml +0 -19
  255. data/.data/spec/std/isa/param/VSTVEC_MODE_DIRECT.yaml +0 -21
  256. data/.data/spec/std/isa/param/VSTVEC_MODE_VECTORED.yaml +0 -21
@@ -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;
@@ -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;
@@ -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:
@@ -8,13 +8,35 @@ kind: parameter
8
8
  name: ELEN
9
9
  description: |
10
10
  The maximum size in bits of a vector element that any operation can produce or consume.
11
- long_name: TODO
11
+ long_name: maximum vector element bit width
12
12
  schema:
13
+ description: |
14
+ An unsigned power of 2 that is at least 8. The ISA states no maximum; the
15
+ absolute upper bound is (max VLEN) * (#VRs) = 64Ki * 32 = 2Mi, since an
16
+ element cannot exceed the total vector register state.
13
17
  type: integer
14
- # requirements:
15
- # idl(): |
16
- # -> (ELEN >='h8) && (popcount(ELEN) == 1);
17
- # reason: ELEN >= 8, which must be a power of 2.
18
+ enum:
19
+ [
20
+ 0x8,
21
+ 0x10,
22
+ 0x20,
23
+ 0x40,
24
+ 0x80,
25
+ 0x100,
26
+ 0x200,
27
+ 0x400,
28
+ 0x800,
29
+ 0x1000,
30
+ 0x2000,
31
+ 0x4000,
32
+ 0x8000,
33
+ 0x10000,
34
+ 0x20000,
35
+ 0x40000,
36
+ 0x80000,
37
+ 0x100000,
38
+ 0x200000,
39
+ ]
18
40
  definedBy:
19
41
  extension:
20
42
  name: Zvl32b
@@ -25,3 +25,16 @@ schema:
25
25
  definedBy:
26
26
  extension:
27
27
  name: H
28
+ requirements:
29
+ idl(): |
30
+ for (U32 i = 0; i < 3; i++) {
31
+ !implemented?(ExtensionName::Zicntr) -> !HCOUNTENABLE_EN[i];
32
+ }
33
+ for (U32 i = 3; i < 32; i++) {
34
+ !implemented?(ExtensionName::Zihpm) -> !HCOUNTENABLE_EN[i];
35
+ (!HPM_COUNTER_EN[i]) -> !HCOUNTENABLE_EN[i];
36
+ }
37
+ reason: |
38
+ Counters 0-2 are defined by Zicntr
39
+ Counters 3..31 are defined by Zihpm
40
+ When mhpmcounter[i] is not implemented, it cannot be enabled.
@@ -7,10 +7,20 @@ $schema: param_schema.json#
7
7
  kind: parameter
8
8
  name: HPM_COUNTER_EN
9
9
  description: |
10
- List of HPM counters that are enabled.
11
- There is one entry for each hpmcounter.
10
+ Whether each HPM counter is implemented in hardware.
12
11
 
13
- The first three entries *must* be false (as they correspond to CY, IR, TM in, _e.g._ `mhmpcountinhibit`)
12
+ `HPM_COUNTER_EN[n]` being `false` means `hpmcounter<n>`/`mhpmcounter<n>` and the
13
+ corresponding `mhpmevent<n>` are not implemented and are hardwired read-only zero.
14
+ (It does *not* mean the counter is implemented but currently stopped from counting;
15
+ that is a separate, run-time concept controlled by `mcountinhibit`.)
16
+
17
+ There is one entry for each hpmcounter, indexed 0-31.
18
+
19
+ Indices 0-2 *must* be false: they are placeholders for the three counters
20
+ (`cycle`/`mcycle` (CY), `time` (TM), and `instret`/`minstret` (IR)) whose
21
+ implementation this parameter does not control. These counters are associated
22
+ with indexes 0, 1, and 2. The rest of the HPM counters logically follow at
23
+ indexes 3-31.
14
24
  Index 3 in HPM_COUNTER_EN corresponds to mhpmcounter3.
15
25
  Index 31 in HPM_COUNTER_EN corresponds to mhpmcounter31.
16
26
  long_name: TODO
@@ -28,9 +28,6 @@ definedBy:
28
28
  - name: HPM_COUNTER_EN
29
29
  index: 4
30
30
  equal: true
31
- - name: HPM_COUNTER_EN
32
- index: 4
33
- equal: true
34
31
  - name: HPM_COUNTER_EN
35
32
  index: 5
36
33
  equal: true
@@ -27,6 +27,14 @@ definedBy:
27
27
  name: Sm
28
28
  requirements:
29
29
  idl(): |
30
+ for (U32 i = 0; i < 3; i++) {
31
+ !implemented?(ExtensionName::Zicntr) -> !MCOUNTENABLE_EN[i];
32
+ }
30
33
  for (U32 i=3; i < 32; i++) {
34
+ !implemented?(ExtensionName::Zihpm) -> !MCOUNTENABLE_EN[i];
31
35
  MCOUNTENABLE_EN[i] -> HPM_COUNTER_EN[i];
32
36
  }
37
+ reason: |
38
+ Counters 0-2 are defined by Zicntr
39
+ Counters 3..31 are defined by Zihpm
40
+ When mhpmcounter[i] is not implemented, it cannot be enabled.
@@ -25,73 +25,79 @@ description: |
25
25
  the base, the minimum alignment cannot be less than 4.
26
26
  schema:
27
27
  description: An unsigned power of 2 greater than or equal to 4 that fits in 64 bits
28
- default: 4
28
+ default: 0x4
29
29
  enum:
30
30
  [
31
- 4,
32
- 8,
33
- 16,
34
- 32,
35
- 64,
36
- 128,
37
- 256,
38
- 512,
39
- 1024,
40
- 2048,
41
- 4095,
42
- 8192,
43
- 16384,
44
- 32768,
45
- 65536,
46
- 131072,
47
- 262144,
48
- 524288,
49
- 1048576,
50
- 2097152,
51
- 4194304,
52
- 8388608,
53
- 16777216,
54
- 33554432,
55
- 67108864,
56
- 134217728,
57
- 268435456,
58
- 536870912,
59
- 1073741824,
60
- 2147483648,
61
- 4294967296,
62
- 8589934592,
63
- 17179869184,
64
- 34359738368,
65
- 68719476736,
66
- 137438953472,
67
- 274877906944,
68
- 549755813888,
69
- 1099511627776,
70
- 2199023255552,
71
- 4398046511104,
72
- 8796093022208,
73
- 17592186044416,
74
- 35184372088832,
75
- 70368744177664,
76
- 140737488355328,
77
- 281474976710656,
78
- 562949953421312,
79
- 1125899906842624,
80
- 2251799813685248,
81
- 4503599627370496,
82
- 9007199254740992,
83
- 18014398509481984,
84
- 36028797018963968,
85
- 72057594037927936,
86
- 144115188075855872,
87
- 288230376151711744,
88
- 576460752303423488,
89
- 1152921504606846976,
90
- 2305843009213693952,
91
- 4611686018427387904,
92
- 9223372036854775808,
31
+ 0x4,
32
+ 0x8,
33
+ 0x10,
34
+ 0x20,
35
+ 0x40,
36
+ 0x80,
37
+ 0x100,
38
+ 0x200,
39
+ 0x400,
40
+ 0x800,
41
+ 0x1000,
42
+ 0x2000,
43
+ 0x4000,
44
+ 0x8000,
45
+ 0x10000,
46
+ 0x20000,
47
+ 0x40000,
48
+ 0x80000,
49
+ 0x100000,
50
+ 0x200000,
51
+ 0x400000,
52
+ 0x800000,
53
+ 0x1000000,
54
+ 0x2000000,
55
+ 0x4000000,
56
+ 0x8000000,
57
+ 0x10000000,
58
+ 0x20000000,
59
+ 0x40000000,
60
+ 0x80000000,
61
+ 0x100000000,
62
+ 0x200000000,
63
+ 0x400000000,
64
+ 0x800000000,
65
+ 0x1000000000,
66
+ 0x2000000000,
67
+ 0x4000000000,
68
+ 0x8000000000,
69
+ 0x10000000000,
70
+ 0x20000000000,
71
+ 0x40000000000,
72
+ 0x80000000000,
73
+ 0x100000000000,
74
+ 0x200000000000,
75
+ 0x400000000000,
76
+ 0x800000000000,
77
+ 0x1000000000000,
78
+ 0x2000000000000,
79
+ 0x4000000000000,
80
+ 0x8000000000000,
81
+ 0x10000000000000,
82
+ 0x20000000000000,
83
+ 0x40000000000000,
84
+ 0x80000000000000,
85
+ 0x100000000000000,
86
+ 0x200000000000000,
87
+ 0x400000000000000,
88
+ 0x800000000000000,
89
+ 0x1000000000000000,
90
+ 0x2000000000000000,
91
+ 0x4000000000000000,
92
+ 0x8000000000000000,
93
93
  ]
94
94
 
95
95
  requirements:
96
- idl(): |
97
- (MXLEN == 32) -> MTVEC_BASE_ALIGNMENT_DIRECT <= 2147483648;
96
+ if:
97
+ param:
98
+ name: MXLEN
99
+ equal: 32
100
+ then:
101
+ param:
102
+ name: MTVEC_BASE_ALIGNMENT_DIRECT
103
+ lessThanOrEqual: 0x80000000