udb 0.1.0

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 (2654) hide show
  1. checksums.yaml +7 -0
  2. data/.data/cfgs/MC100-32.yaml +23 -0
  3. data/.data/cfgs/_.yaml +8 -0
  4. data/.data/cfgs/example_rv64_with_overlay.yaml +618 -0
  5. data/.data/cfgs/mc100-32-full-example.yaml +91 -0
  6. data/.data/cfgs/memmap.json +76 -0
  7. data/.data/cfgs/prm_demo_rv32.yaml +28 -0
  8. data/.data/cfgs/profile/RVA20S64.yaml +73 -0
  9. data/.data/cfgs/profile/RVA20U64.yaml +53 -0
  10. data/.data/cfgs/profile/RVA22S64.yaml +123 -0
  11. data/.data/cfgs/profile/RVA22U64.yaml +85 -0
  12. data/.data/cfgs/profile/RVA23M64.yaml +161 -0
  13. data/.data/cfgs/profile/RVA23S64.yaml +151 -0
  14. data/.data/cfgs/profile/RVA23U64.yaml +131 -0
  15. data/.data/cfgs/profile/RVB23M64.yaml +151 -0
  16. data/.data/cfgs/profile/RVB23S64.yaml +147 -0
  17. data/.data/cfgs/profile/RVB23U64.yaml +141 -0
  18. data/.data/cfgs/profile/RVI20U32.yaml +41 -0
  19. data/.data/cfgs/profile/RVI20U64.yaml +41 -0
  20. data/.data/cfgs/qc_iu.yaml +153 -0
  21. data/.data/cfgs/regress.yaml +9 -0
  22. data/.data/cfgs/rv32-riscv-tests.yaml +208 -0
  23. data/.data/cfgs/rv32-vector.yaml +246 -0
  24. data/.data/cfgs/rv32.yaml +15 -0
  25. data/.data/cfgs/rv64-riscv-tests.yaml +202 -0
  26. data/.data/cfgs/rv64-vector.yaml +245 -0
  27. data/.data/cfgs/rv64.yaml +14 -0
  28. data/.data/spec/custom/isa/example/csr/marchid.yaml +8 -0
  29. data/.data/spec/custom/isa/example/csr/mcustom0.yaml +18 -0
  30. data/.data/spec/custom/isa/example/ext/Xcustom.yaml +15 -0
  31. data/.data/spec/custom/isa/qc_iu/csr/Xqci/gen_mcliciX.rb +188 -0
  32. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mcause.yaml +85 -0
  33. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicie0.yaml +181 -0
  34. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicie1.yaml +181 -0
  35. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicie2.yaml +181 -0
  36. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicie3.yaml +181 -0
  37. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicie4.yaml +181 -0
  38. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicie5.yaml +181 -0
  39. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicie6.yaml +181 -0
  40. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicie7.yaml +181 -0
  41. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl00.yaml +62 -0
  42. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl01.yaml +62 -0
  43. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl02.yaml +62 -0
  44. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl03.yaml +62 -0
  45. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl04.yaml +62 -0
  46. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl05.yaml +62 -0
  47. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl06.yaml +62 -0
  48. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl07.yaml +62 -0
  49. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl08.yaml +62 -0
  50. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl09.yaml +62 -0
  51. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl10.yaml +62 -0
  52. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl11.yaml +62 -0
  53. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl12.yaml +62 -0
  54. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl13.yaml +62 -0
  55. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl14.yaml +62 -0
  56. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl15.yaml +62 -0
  57. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl16.yaml +62 -0
  58. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl17.yaml +62 -0
  59. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl18.yaml +62 -0
  60. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl19.yaml +62 -0
  61. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl20.yaml +62 -0
  62. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl21.yaml +62 -0
  63. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl22.yaml +62 -0
  64. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl23.yaml +62 -0
  65. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl24.yaml +62 -0
  66. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl25.yaml +62 -0
  67. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl26.yaml +62 -0
  68. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl27.yaml +62 -0
  69. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl28.yaml +62 -0
  70. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl29.yaml +62 -0
  71. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl30.yaml +62 -0
  72. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicilvl31.yaml +62 -0
  73. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicip0.yaml +181 -0
  74. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicip1.yaml +181 -0
  75. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicip2.yaml +181 -0
  76. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicip3.yaml +181 -0
  77. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicip4.yaml +181 -0
  78. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicip5.yaml +181 -0
  79. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicip6.yaml +181 -0
  80. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mclicip7.yaml +181 -0
  81. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mmcr.yaml +42 -0
  82. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mntvec.yaml +28 -0
  83. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mstkbottomaddr.yaml +33 -0
  84. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mstktopaddr.yaml +33 -0
  85. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mthreadptr.yaml +27 -0
  86. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mwpendaddr0.yaml +27 -0
  87. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mwpendaddr1.yaml +27 -0
  88. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mwpendaddr2.yaml +27 -0
  89. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mwpendaddr3.yaml +27 -0
  90. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mwpstartaddr0.yaml +27 -0
  91. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mwpstartaddr1.yaml +27 -0
  92. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mwpstartaddr2.yaml +27 -0
  93. data/.data/spec/custom/isa/qc_iu/csr/Xqci/qc.mwpstartaddr3.yaml +27 -0
  94. data/.data/spec/custom/isa/qc_iu/exception_code/ExecWatchpoint.yaml +13 -0
  95. data/.data/spec/custom/isa/qc_iu/exception_code/IllegalStackPointer.yaml +13 -0
  96. data/.data/spec/custom/isa/qc_iu/exception_code/ReadWatchpoint.yaml +13 -0
  97. data/.data/spec/custom/isa/qc_iu/exception_code/SpOutOfRange.yaml +13 -0
  98. data/.data/spec/custom/isa/qc_iu/exception_code/WriteWatchpoint.yaml +13 -0
  99. data/.data/spec/custom/isa/qc_iu/ext/Xqccmp.yaml +160 -0
  100. data/.data/spec/custom/isa/qc_iu/ext/Xqci.yaml +778 -0
  101. data/.data/spec/custom/isa/qc_iu/ext/Xqcia.yaml +111 -0
  102. data/.data/spec/custom/isa/qc_iu/ext/Xqciac.yaml +66 -0
  103. data/.data/spec/custom/isa/qc_iu/ext/Xqcibi.yaml +50 -0
  104. data/.data/spec/custom/isa/qc_iu/ext/Xqcibm.yaml +146 -0
  105. data/.data/spec/custom/isa/qc_iu/ext/Xqcicli.yaml +57 -0
  106. data/.data/spec/custom/isa/qc_iu/ext/Xqcicm.yaml +50 -0
  107. data/.data/spec/custom/isa/qc_iu/ext/Xqcics.yaml +44 -0
  108. data/.data/spec/custom/isa/qc_iu/ext/Xqcicsr.yaml +68 -0
  109. data/.data/spec/custom/isa/qc_iu/ext/Xqciint.yaml +173 -0
  110. data/.data/spec/custom/isa/qc_iu/ext/Xqciio.yaml +32 -0
  111. data/.data/spec/custom/isa/qc_iu/ext/Xqcilb.yaml +46 -0
  112. data/.data/spec/custom/isa/qc_iu/ext/Xqcili.yaml +49 -0
  113. data/.data/spec/custom/isa/qc_iu/ext/Xqcilia.yaml +47 -0
  114. data/.data/spec/custom/isa/qc_iu/ext/Xqcilo.yaml +59 -0
  115. data/.data/spec/custom/isa/qc_iu/ext/Xqcilsm.yaml +94 -0
  116. data/.data/spec/custom/isa/qc_iu/ext/Xqcisim.yaml +48 -0
  117. data/.data/spec/custom/isa/qc_iu/ext/Xqcisls.yaml +44 -0
  118. data/.data/spec/custom/isa/qc_iu/ext/Xqcisync.yaml +62 -0
  119. data/.data/spec/custom/isa/qc_iu/inst/C/c.slli.yaml +6 -0
  120. data/.data/spec/custom/isa/qc_iu/inst/C/c.srai.yaml +5 -0
  121. data/.data/spec/custom/isa/qc_iu/inst/C/c.srli.yaml +5 -0
  122. data/.data/spec/custom/isa/qc_iu/inst/I/slti.yaml +15 -0
  123. data/.data/spec/custom/isa/qc_iu/inst/I/sltiu.yaml +8 -0
  124. data/.data/spec/custom/isa/qc_iu/inst/Xqccmp/qc.cm.mva01s.yaml +36 -0
  125. data/.data/spec/custom/isa/qc_iu/inst/Xqccmp/qc.cm.mvsa01.yaml +38 -0
  126. data/.data/spec/custom/isa/qc_iu/inst/Xqccmp/qc.cm.pop.yaml +87 -0
  127. data/.data/spec/custom/isa/qc_iu/inst/Xqccmp/qc.cm.popret.yaml +88 -0
  128. data/.data/spec/custom/isa/qc_iu/inst/Xqccmp/qc.cm.popretz.yaml +88 -0
  129. data/.data/spec/custom/isa/qc_iu/inst/Xqccmp/qc.cm.push.yaml +87 -0
  130. data/.data/spec/custom/isa/qc_iu/inst/Xqccmp/qc.cm.pushfp.yaml +89 -0
  131. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.addsat.yaml +51 -0
  132. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.addusat.yaml +44 -0
  133. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.beqi.yaml +40 -0
  134. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.bgei.yaml +40 -0
  135. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.bgeui.yaml +40 -0
  136. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.blti.yaml +40 -0
  137. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.bltui.yaml +40 -0
  138. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.bnei.yaml +40 -0
  139. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.brev32.yaml +41 -0
  140. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.bexti.yaml +36 -0
  141. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.bseti.yaml +36 -0
  142. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.clrint.yaml +36 -0
  143. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.delay.yaml +31 -0
  144. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.di.yaml +30 -0
  145. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.dir.yaml +36 -0
  146. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.ei.yaml +30 -0
  147. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.eir.yaml +35 -0
  148. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.extu.yaml +36 -0
  149. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.mienter.nest.yaml +61 -0
  150. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.mienter.yaml +59 -0
  151. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.mileaveret.yaml +106 -0
  152. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.mnret.yaml +50 -0
  153. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.mret.yaml +53 -0
  154. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.muliadd.yaml +37 -0
  155. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.mveqz.yaml +35 -0
  156. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.ptrace.yaml +31 -0
  157. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.setint.yaml +36 -0
  158. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.sync.yaml +46 -0
  159. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.syncr.yaml +46 -0
  160. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.syncwf.yaml +46 -0
  161. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.c.syncwl.yaml +46 -0
  162. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.clo.yaml +38 -0
  163. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.clrinti.yaml +35 -0
  164. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.compress2.yaml +37 -0
  165. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.compress3.yaml +37 -0
  166. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.csrrwr.yaml +52 -0
  167. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.csrrwri.yaml +48 -0
  168. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.cto.yaml +38 -0
  169. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.addai.yaml +33 -0
  170. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.addi.yaml +37 -0
  171. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.andai.yaml +33 -0
  172. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.andi.yaml +37 -0
  173. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.beqi.yaml +40 -0
  174. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.bgei.yaml +40 -0
  175. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.bgeui.yaml +40 -0
  176. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.blti.yaml +40 -0
  177. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.bltui.yaml +40 -0
  178. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.bnei.yaml +40 -0
  179. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.j.yaml +32 -0
  180. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.jal.yaml +35 -0
  181. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.lb.yaml +37 -0
  182. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.lbu.yaml +37 -0
  183. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.lh.yaml +37 -0
  184. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.lhu.yaml +37 -0
  185. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.li.yaml +33 -0
  186. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.lw.yaml +37 -0
  187. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.orai.yaml +33 -0
  188. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.ori.yaml +37 -0
  189. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.sb.yaml +36 -0
  190. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.sh.yaml +36 -0
  191. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.sw.yaml +36 -0
  192. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.xorai.yaml +33 -0
  193. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.e.xori.yaml +37 -0
  194. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.expand2.yaml +39 -0
  195. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.expand3.yaml +39 -0
  196. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.ext.yaml +42 -0
  197. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.extd.yaml +42 -0
  198. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.extdpr.yaml +49 -0
  199. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.extdprh.yaml +49 -0
  200. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.extdr.yaml +49 -0
  201. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.extdu.yaml +42 -0
  202. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.extdupr.yaml +49 -0
  203. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.extduprh.yaml +49 -0
  204. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.extdur.yaml +49 -0
  205. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.extu.yaml +41 -0
  206. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.insb.yaml +42 -0
  207. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.insbh.yaml +51 -0
  208. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.insbhr.yaml +53 -0
  209. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.insbi.yaml +43 -0
  210. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.insbpr.yaml +47 -0
  211. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.insbprh.yaml +47 -0
  212. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.insbr.yaml +47 -0
  213. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.insbri.yaml +48 -0
  214. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.inw.yaml +38 -0
  215. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.li.yaml +33 -0
  216. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lieq.yaml +41 -0
  217. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lieqi.yaml +40 -0
  218. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lige.yaml +41 -0
  219. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.ligei.yaml +40 -0
  220. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.ligeu.yaml +41 -0
  221. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.ligeui.yaml +40 -0
  222. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lilt.yaml +41 -0
  223. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lilti.yaml +40 -0
  224. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.liltu.yaml +41 -0
  225. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.liltui.yaml +40 -0
  226. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.line.yaml +41 -0
  227. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.linei.yaml +40 -0
  228. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lrb.yaml +40 -0
  229. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lrbu.yaml +39 -0
  230. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lrh.yaml +40 -0
  231. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lrhu.yaml +39 -0
  232. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lrw.yaml +39 -0
  233. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lwm.yaml +46 -0
  234. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.lwmi.yaml +45 -0
  235. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.muliadd.yaml +37 -0
  236. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mveq.yaml +42 -0
  237. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mveqi.yaml +41 -0
  238. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvge.yaml +42 -0
  239. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvgei.yaml +41 -0
  240. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvgeu.yaml +42 -0
  241. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvgeui.yaml +41 -0
  242. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvlt.yaml +42 -0
  243. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvlti.yaml +41 -0
  244. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvltu.yaml +42 -0
  245. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvltui.yaml +41 -0
  246. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvne.yaml +42 -0
  247. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.mvnei.yaml +41 -0
  248. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.norm.yaml +41 -0
  249. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.normeu.yaml +40 -0
  250. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.normu.yaml +40 -0
  251. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.outw.yaml +38 -0
  252. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.pcoredump.yaml +32 -0
  253. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.pexit.yaml +33 -0
  254. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.ppreg.yaml +33 -0
  255. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.ppregs.yaml +31 -0
  256. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.pputc.yaml +33 -0
  257. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.pputci.yaml +33 -0
  258. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.pputs.yaml +34 -0
  259. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.psyscall.yaml +34 -0
  260. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.psyscalli.yaml +34 -0
  261. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.selecteqi.yaml +44 -0
  262. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.selectieq.yaml +44 -0
  263. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.selectieqi.yaml +43 -0
  264. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.selectiieq.yaml +43 -0
  265. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.selectiine.yaml +43 -0
  266. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.selectine.yaml +44 -0
  267. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.selectinei.yaml +43 -0
  268. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.selectnei.yaml +44 -0
  269. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.setinti.yaml +35 -0
  270. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.setwm.yaml +45 -0
  271. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.setwmi.yaml +44 -0
  272. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.shladd.yaml +43 -0
  273. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.shlsat.yaml +48 -0
  274. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.shlusat.yaml +45 -0
  275. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.srb.yaml +39 -0
  276. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.srh.yaml +39 -0
  277. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.srw.yaml +39 -0
  278. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.subsat.yaml +53 -0
  279. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.subusat.yaml +37 -0
  280. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.swm.yaml +46 -0
  281. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.swmi.yaml +45 -0
  282. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.sync.yaml +34 -0
  283. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.syncr.yaml +34 -0
  284. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.syncwf.yaml +34 -0
  285. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.syncwl.yaml +34 -0
  286. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.wrap.yaml +43 -0
  287. data/.data/spec/custom/isa/qc_iu/inst/Xqci/qc.wrapi.yaml +47 -0
  288. data/.data/spec/custom/isa/qc_iu/isa/globals.isa +83 -0
  289. data/.data/spec/custom/isa/regress/manual_version/isa/regress/isa_regress.yaml +222 -0
  290. data/.data/spec/schemas/README.adoc +87 -0
  291. data/.data/spec/schemas/config_schema.json +198 -0
  292. data/.data/spec/schemas/csr_schema.json +319 -0
  293. data/.data/spec/schemas/exception_code_schema.json +33 -0
  294. data/.data/spec/schemas/ext_schema.json +168 -0
  295. data/.data/spec/schemas/inst_opcode_schema.json +37 -0
  296. data/.data/spec/schemas/inst_schema.json +503 -0
  297. data/.data/spec/schemas/inst_subtype_schema.json +190 -0
  298. data/.data/spec/schemas/inst_type_schema.json +69 -0
  299. data/.data/spec/schemas/inst_var_schema.json +93 -0
  300. data/.data/spec/schemas/inst_var_type_schema.json +45 -0
  301. data/.data/spec/schemas/inst_variable_metadatas.json +10 -0
  302. data/.data/spec/schemas/interrupt_code_schema.json +33 -0
  303. data/.data/spec/schemas/json-schema-draft-07.json +242 -0
  304. data/.data/spec/schemas/manual_schema.json +44 -0
  305. data/.data/spec/schemas/manual_version_schema.json +129 -0
  306. data/.data/spec/schemas/mmr_schema.json +74 -0
  307. data/.data/spec/schemas/non_isa_schema.json +102 -0
  308. data/.data/spec/schemas/param_schema.json +48 -0
  309. data/.data/spec/schemas/prm_schema.json +203 -0
  310. data/.data/spec/schemas/proc_cert_class_schema.json +35 -0
  311. data/.data/spec/schemas/proc_cert_model_schema.json +336 -0
  312. data/.data/spec/schemas/profile_family_schema.json +54 -0
  313. data/.data/spec/schemas/profile_release_schema.json +22 -0
  314. data/.data/spec/schemas/profile_schema.json +139 -0
  315. data/.data/spec/schemas/register_file_schema.json +123 -0
  316. data/.data/spec/schemas/schema_defs.json +905 -0
  317. data/.data/spec/std/isa/README.adoc +295 -0
  318. data/.data/spec/std/isa/csr/F/fcsr.yaml +190 -0
  319. data/.data/spec/std/isa/csr/F/fflags.yaml +95 -0
  320. data/.data/spec/std/isa/csr/F/frm.yaml +57 -0
  321. data/.data/spec/std/isa/csr/H/hcounteren.layout +178 -0
  322. data/.data/spec/std/isa/csr/H/hcounteren.yaml +1215 -0
  323. data/.data/spec/std/isa/csr/H/henvcfg.yaml +307 -0
  324. data/.data/spec/std/isa/csr/H/henvcfgh.yaml +120 -0
  325. data/.data/spec/std/isa/csr/H/hgatp.yaml +242 -0
  326. data/.data/spec/std/isa/csr/H/htimedelta.yaml +32 -0
  327. data/.data/spec/std/isa/csr/H/htimedeltah.yaml +32 -0
  328. data/.data/spec/std/isa/csr/H/htinst.yaml +50 -0
  329. data/.data/spec/std/isa/csr/H/htval.yaml +42 -0
  330. data/.data/spec/std/isa/csr/H/mtinst.yaml +50 -0
  331. data/.data/spec/std/isa/csr/H/mtval2.yaml +43 -0
  332. data/.data/spec/std/isa/csr/H/vsatp.yaml +149 -0
  333. data/.data/spec/std/isa/csr/I/mcounteren.layout +192 -0
  334. data/.data/spec/std/isa/csr/I/mcounteren.yaml +1061 -0
  335. data/.data/spec/std/isa/csr/I/pmpaddr0.yaml +79 -0
  336. data/.data/spec/std/isa/csr/I/pmpaddr1.yaml +79 -0
  337. data/.data/spec/std/isa/csr/I/pmpaddr10.yaml +79 -0
  338. data/.data/spec/std/isa/csr/I/pmpaddr11.yaml +79 -0
  339. data/.data/spec/std/isa/csr/I/pmpaddr12.yaml +79 -0
  340. data/.data/spec/std/isa/csr/I/pmpaddr13.yaml +79 -0
  341. data/.data/spec/std/isa/csr/I/pmpaddr14.yaml +79 -0
  342. data/.data/spec/std/isa/csr/I/pmpaddr15.yaml +79 -0
  343. data/.data/spec/std/isa/csr/I/pmpaddr16.yaml +79 -0
  344. data/.data/spec/std/isa/csr/I/pmpaddr17.yaml +79 -0
  345. data/.data/spec/std/isa/csr/I/pmpaddr18.yaml +79 -0
  346. data/.data/spec/std/isa/csr/I/pmpaddr19.yaml +79 -0
  347. data/.data/spec/std/isa/csr/I/pmpaddr2.yaml +79 -0
  348. data/.data/spec/std/isa/csr/I/pmpaddr20.yaml +79 -0
  349. data/.data/spec/std/isa/csr/I/pmpaddr21.yaml +79 -0
  350. data/.data/spec/std/isa/csr/I/pmpaddr22.yaml +79 -0
  351. data/.data/spec/std/isa/csr/I/pmpaddr23.yaml +79 -0
  352. data/.data/spec/std/isa/csr/I/pmpaddr24.yaml +79 -0
  353. data/.data/spec/std/isa/csr/I/pmpaddr25.yaml +79 -0
  354. data/.data/spec/std/isa/csr/I/pmpaddr26.yaml +79 -0
  355. data/.data/spec/std/isa/csr/I/pmpaddr27.yaml +79 -0
  356. data/.data/spec/std/isa/csr/I/pmpaddr28.yaml +79 -0
  357. data/.data/spec/std/isa/csr/I/pmpaddr29.yaml +79 -0
  358. data/.data/spec/std/isa/csr/I/pmpaddr3.yaml +79 -0
  359. data/.data/spec/std/isa/csr/I/pmpaddr30.yaml +79 -0
  360. data/.data/spec/std/isa/csr/I/pmpaddr31.yaml +79 -0
  361. data/.data/spec/std/isa/csr/I/pmpaddr32.yaml +79 -0
  362. data/.data/spec/std/isa/csr/I/pmpaddr33.yaml +79 -0
  363. data/.data/spec/std/isa/csr/I/pmpaddr34.yaml +79 -0
  364. data/.data/spec/std/isa/csr/I/pmpaddr35.yaml +79 -0
  365. data/.data/spec/std/isa/csr/I/pmpaddr36.yaml +79 -0
  366. data/.data/spec/std/isa/csr/I/pmpaddr37.yaml +79 -0
  367. data/.data/spec/std/isa/csr/I/pmpaddr38.yaml +79 -0
  368. data/.data/spec/std/isa/csr/I/pmpaddr39.yaml +79 -0
  369. data/.data/spec/std/isa/csr/I/pmpaddr4.yaml +79 -0
  370. data/.data/spec/std/isa/csr/I/pmpaddr40.yaml +79 -0
  371. data/.data/spec/std/isa/csr/I/pmpaddr41.yaml +79 -0
  372. data/.data/spec/std/isa/csr/I/pmpaddr42.yaml +79 -0
  373. data/.data/spec/std/isa/csr/I/pmpaddr43.yaml +79 -0
  374. data/.data/spec/std/isa/csr/I/pmpaddr44.yaml +79 -0
  375. data/.data/spec/std/isa/csr/I/pmpaddr45.yaml +79 -0
  376. data/.data/spec/std/isa/csr/I/pmpaddr46.yaml +79 -0
  377. data/.data/spec/std/isa/csr/I/pmpaddr47.yaml +79 -0
  378. data/.data/spec/std/isa/csr/I/pmpaddr48.yaml +79 -0
  379. data/.data/spec/std/isa/csr/I/pmpaddr49.yaml +79 -0
  380. data/.data/spec/std/isa/csr/I/pmpaddr5.yaml +79 -0
  381. data/.data/spec/std/isa/csr/I/pmpaddr50.yaml +79 -0
  382. data/.data/spec/std/isa/csr/I/pmpaddr51.yaml +79 -0
  383. data/.data/spec/std/isa/csr/I/pmpaddr52.yaml +79 -0
  384. data/.data/spec/std/isa/csr/I/pmpaddr53.yaml +79 -0
  385. data/.data/spec/std/isa/csr/I/pmpaddr54.yaml +79 -0
  386. data/.data/spec/std/isa/csr/I/pmpaddr55.yaml +79 -0
  387. data/.data/spec/std/isa/csr/I/pmpaddr56.yaml +79 -0
  388. data/.data/spec/std/isa/csr/I/pmpaddr57.yaml +79 -0
  389. data/.data/spec/std/isa/csr/I/pmpaddr58.yaml +79 -0
  390. data/.data/spec/std/isa/csr/I/pmpaddr59.yaml +79 -0
  391. data/.data/spec/std/isa/csr/I/pmpaddr6.yaml +79 -0
  392. data/.data/spec/std/isa/csr/I/pmpaddr60.yaml +79 -0
  393. data/.data/spec/std/isa/csr/I/pmpaddr61.yaml +79 -0
  394. data/.data/spec/std/isa/csr/I/pmpaddr62.yaml +79 -0
  395. data/.data/spec/std/isa/csr/I/pmpaddr63.yaml +79 -0
  396. data/.data/spec/std/isa/csr/I/pmpaddr7.yaml +79 -0
  397. data/.data/spec/std/isa/csr/I/pmpaddr8.yaml +79 -0
  398. data/.data/spec/std/isa/csr/I/pmpaddr9.yaml +79 -0
  399. data/.data/spec/std/isa/csr/I/pmpaddrN.layout +81 -0
  400. data/.data/spec/std/isa/csr/I/pmpcfg0.yaml +493 -0
  401. data/.data/spec/std/isa/csr/I/pmpcfg1.yaml +255 -0
  402. data/.data/spec/std/isa/csr/I/pmpcfg10.yaml +493 -0
  403. data/.data/spec/std/isa/csr/I/pmpcfg11.yaml +255 -0
  404. data/.data/spec/std/isa/csr/I/pmpcfg12.yaml +493 -0
  405. data/.data/spec/std/isa/csr/I/pmpcfg13.yaml +255 -0
  406. data/.data/spec/std/isa/csr/I/pmpcfg14.yaml +493 -0
  407. data/.data/spec/std/isa/csr/I/pmpcfg15.yaml +255 -0
  408. data/.data/spec/std/isa/csr/I/pmpcfg2.yaml +493 -0
  409. data/.data/spec/std/isa/csr/I/pmpcfg3.yaml +255 -0
  410. data/.data/spec/std/isa/csr/I/pmpcfg4.yaml +493 -0
  411. data/.data/spec/std/isa/csr/I/pmpcfg5.yaml +255 -0
  412. data/.data/spec/std/isa/csr/I/pmpcfg6.yaml +493 -0
  413. data/.data/spec/std/isa/csr/I/pmpcfg7.yaml +255 -0
  414. data/.data/spec/std/isa/csr/I/pmpcfg8.yaml +493 -0
  415. data/.data/spec/std/isa/csr/I/pmpcfg9.yaml +255 -0
  416. data/.data/spec/std/isa/csr/I/pmpcfgN.layout +90 -0
  417. data/.data/spec/std/isa/csr/S/scounteren.layout +103 -0
  418. data/.data/spec/std/isa/csr/S/scounteren.yaml +692 -0
  419. data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfg.yaml +97 -0
  420. data/.data/spec/std/isa/csr/Smcntrpmf/mcyclecfgh.yaml +69 -0
  421. data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfg.yaml +94 -0
  422. data/.data/spec/std/isa/csr/Smcntrpmf/minstretcfgh.yaml +69 -0
  423. data/.data/spec/std/isa/csr/Smcsrind/mireg.yaml +63 -0
  424. data/.data/spec/std/isa/csr/Smcsrind/mireg2.yaml +63 -0
  425. data/.data/spec/std/isa/csr/Smcsrind/mireg3.yaml +63 -0
  426. data/.data/spec/std/isa/csr/Smcsrind/mireg4.yaml +63 -0
  427. data/.data/spec/std/isa/csr/Smcsrind/mireg5.yaml +63 -0
  428. data/.data/spec/std/isa/csr/Smcsrind/mireg6.yaml +63 -0
  429. data/.data/spec/std/isa/csr/Smcsrind/miselect.yaml +47 -0
  430. data/.data/spec/std/isa/csr/Smcsrind/sireg.yaml +63 -0
  431. data/.data/spec/std/isa/csr/Smcsrind/sireg2.yaml +63 -0
  432. data/.data/spec/std/isa/csr/Smcsrind/sireg3.yaml +63 -0
  433. data/.data/spec/std/isa/csr/Smcsrind/sireg4.yaml +63 -0
  434. data/.data/spec/std/isa/csr/Smcsrind/sireg5.yaml +63 -0
  435. data/.data/spec/std/isa/csr/Smcsrind/sireg6.yaml +63 -0
  436. data/.data/spec/std/isa/csr/Smcsrind/siselect.yaml +41 -0
  437. data/.data/spec/std/isa/csr/Smcsrind/vsireg.yaml +63 -0
  438. data/.data/spec/std/isa/csr/Smcsrind/vsireg2.yaml +62 -0
  439. data/.data/spec/std/isa/csr/Smcsrind/vsireg3.yaml +61 -0
  440. data/.data/spec/std/isa/csr/Smcsrind/vsireg4.yaml +61 -0
  441. data/.data/spec/std/isa/csr/Smcsrind/vsireg5.yaml +62 -0
  442. data/.data/spec/std/isa/csr/Smcsrind/vsireg6.yaml +62 -0
  443. data/.data/spec/std/isa/csr/Smcsrind/vsiselect.yaml +47 -0
  444. data/.data/spec/std/isa/csr/Smctr/mctrctl.yaml +223 -0
  445. data/.data/spec/std/isa/csr/Smctr/sctrctl.yaml +224 -0
  446. data/.data/spec/std/isa/csr/Smctr/vsctrctl.yaml +228 -0
  447. data/.data/spec/std/isa/csr/Smrnmi/mncause.yaml +49 -0
  448. data/.data/spec/std/isa/csr/Smrnmi/mnepc.yaml +54 -0
  449. data/.data/spec/std/isa/csr/Smrnmi/mnscratch.yaml +26 -0
  450. data/.data/spec/std/isa/csr/Smrnmi/mnstatus.yaml +109 -0
  451. data/.data/spec/std/isa/csr/Sscofpmf/scountovf.layout +64 -0
  452. data/.data/spec/std/isa/csr/Sscofpmf/scountovf.yaml +455 -0
  453. data/.data/spec/std/isa/csr/Ssqosid/srmcfg.yaml +116 -0
  454. data/.data/spec/std/isa/csr/V/vcsr.yaml +36 -0
  455. data/.data/spec/std/isa/csr/V/vl.yaml +33 -0
  456. data/.data/spec/std/isa/csr/V/vlenb.yaml +27 -0
  457. data/.data/spec/std/isa/csr/V/vstart.yaml +81 -0
  458. data/.data/spec/std/isa/csr/V/vtype.yaml +125 -0
  459. data/.data/spec/std/isa/csr/V/vxrm.yaml +48 -0
  460. data/.data/spec/std/isa/csr/V/vxsat.yaml +33 -0
  461. data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.layout +86 -0
  462. data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.yaml +507 -0
  463. data/.data/spec/std/isa/csr/Zihpm/hpmcounter10.yaml +67 -0
  464. data/.data/spec/std/isa/csr/Zihpm/hpmcounter10h.yaml +69 -0
  465. data/.data/spec/std/isa/csr/Zihpm/hpmcounter11.yaml +67 -0
  466. data/.data/spec/std/isa/csr/Zihpm/hpmcounter11h.yaml +69 -0
  467. data/.data/spec/std/isa/csr/Zihpm/hpmcounter12.yaml +67 -0
  468. data/.data/spec/std/isa/csr/Zihpm/hpmcounter12h.yaml +69 -0
  469. data/.data/spec/std/isa/csr/Zihpm/hpmcounter13.yaml +67 -0
  470. data/.data/spec/std/isa/csr/Zihpm/hpmcounter13h.yaml +69 -0
  471. data/.data/spec/std/isa/csr/Zihpm/hpmcounter14.yaml +67 -0
  472. data/.data/spec/std/isa/csr/Zihpm/hpmcounter14h.yaml +69 -0
  473. data/.data/spec/std/isa/csr/Zihpm/hpmcounter15.yaml +67 -0
  474. data/.data/spec/std/isa/csr/Zihpm/hpmcounter15h.yaml +69 -0
  475. data/.data/spec/std/isa/csr/Zihpm/hpmcounter16.yaml +67 -0
  476. data/.data/spec/std/isa/csr/Zihpm/hpmcounter16h.yaml +69 -0
  477. data/.data/spec/std/isa/csr/Zihpm/hpmcounter17.yaml +67 -0
  478. data/.data/spec/std/isa/csr/Zihpm/hpmcounter17h.yaml +69 -0
  479. data/.data/spec/std/isa/csr/Zihpm/hpmcounter18.yaml +67 -0
  480. data/.data/spec/std/isa/csr/Zihpm/hpmcounter18h.yaml +69 -0
  481. data/.data/spec/std/isa/csr/Zihpm/hpmcounter19.yaml +67 -0
  482. data/.data/spec/std/isa/csr/Zihpm/hpmcounter19h.yaml +69 -0
  483. data/.data/spec/std/isa/csr/Zihpm/hpmcounter20.yaml +67 -0
  484. data/.data/spec/std/isa/csr/Zihpm/hpmcounter20h.yaml +69 -0
  485. data/.data/spec/std/isa/csr/Zihpm/hpmcounter21.yaml +67 -0
  486. data/.data/spec/std/isa/csr/Zihpm/hpmcounter21h.yaml +69 -0
  487. data/.data/spec/std/isa/csr/Zihpm/hpmcounter22.yaml +67 -0
  488. data/.data/spec/std/isa/csr/Zihpm/hpmcounter22h.yaml +69 -0
  489. data/.data/spec/std/isa/csr/Zihpm/hpmcounter23.yaml +67 -0
  490. data/.data/spec/std/isa/csr/Zihpm/hpmcounter23h.yaml +69 -0
  491. data/.data/spec/std/isa/csr/Zihpm/hpmcounter24.yaml +67 -0
  492. data/.data/spec/std/isa/csr/Zihpm/hpmcounter24h.yaml +69 -0
  493. data/.data/spec/std/isa/csr/Zihpm/hpmcounter25.yaml +67 -0
  494. data/.data/spec/std/isa/csr/Zihpm/hpmcounter25h.yaml +69 -0
  495. data/.data/spec/std/isa/csr/Zihpm/hpmcounter26.yaml +67 -0
  496. data/.data/spec/std/isa/csr/Zihpm/hpmcounter26h.yaml +69 -0
  497. data/.data/spec/std/isa/csr/Zihpm/hpmcounter27.yaml +67 -0
  498. data/.data/spec/std/isa/csr/Zihpm/hpmcounter27h.yaml +69 -0
  499. data/.data/spec/std/isa/csr/Zihpm/hpmcounter28.yaml +67 -0
  500. data/.data/spec/std/isa/csr/Zihpm/hpmcounter28h.yaml +69 -0
  501. data/.data/spec/std/isa/csr/Zihpm/hpmcounter29.yaml +67 -0
  502. data/.data/spec/std/isa/csr/Zihpm/hpmcounter29h.yaml +69 -0
  503. data/.data/spec/std/isa/csr/Zihpm/hpmcounter3.yaml +67 -0
  504. data/.data/spec/std/isa/csr/Zihpm/hpmcounter30.yaml +67 -0
  505. data/.data/spec/std/isa/csr/Zihpm/hpmcounter30h.yaml +69 -0
  506. data/.data/spec/std/isa/csr/Zihpm/hpmcounter31.yaml +67 -0
  507. data/.data/spec/std/isa/csr/Zihpm/hpmcounter31h.yaml +69 -0
  508. data/.data/spec/std/isa/csr/Zihpm/hpmcounter3h.yaml +69 -0
  509. data/.data/spec/std/isa/csr/Zihpm/hpmcounter4.yaml +67 -0
  510. data/.data/spec/std/isa/csr/Zihpm/hpmcounter4h.yaml +69 -0
  511. data/.data/spec/std/isa/csr/Zihpm/hpmcounter5.yaml +67 -0
  512. data/.data/spec/std/isa/csr/Zihpm/hpmcounter5h.yaml +69 -0
  513. data/.data/spec/std/isa/csr/Zihpm/hpmcounter6.yaml +67 -0
  514. data/.data/spec/std/isa/csr/Zihpm/hpmcounter6h.yaml +69 -0
  515. data/.data/spec/std/isa/csr/Zihpm/hpmcounter7.yaml +67 -0
  516. data/.data/spec/std/isa/csr/Zihpm/hpmcounter7h.yaml +69 -0
  517. data/.data/spec/std/isa/csr/Zihpm/hpmcounter8.yaml +67 -0
  518. data/.data/spec/std/isa/csr/Zihpm/hpmcounter8h.yaml +69 -0
  519. data/.data/spec/std/isa/csr/Zihpm/hpmcounter9.yaml +67 -0
  520. data/.data/spec/std/isa/csr/Zihpm/hpmcounter9h.yaml +69 -0
  521. data/.data/spec/std/isa/csr/Zihpm/hpmcounterN.layout +65 -0
  522. data/.data/spec/std/isa/csr/Zihpm/hpmcounterNh.layout +67 -0
  523. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10.yaml +106 -0
  524. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter10h.yaml +85 -0
  525. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11.yaml +106 -0
  526. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter11h.yaml +85 -0
  527. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12.yaml +106 -0
  528. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter12h.yaml +85 -0
  529. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13.yaml +106 -0
  530. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter13h.yaml +85 -0
  531. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14.yaml +106 -0
  532. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter14h.yaml +85 -0
  533. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15.yaml +106 -0
  534. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter15h.yaml +85 -0
  535. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16.yaml +106 -0
  536. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter16h.yaml +85 -0
  537. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17.yaml +106 -0
  538. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter17h.yaml +85 -0
  539. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18.yaml +106 -0
  540. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter18h.yaml +85 -0
  541. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19.yaml +106 -0
  542. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter19h.yaml +85 -0
  543. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20.yaml +106 -0
  544. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter20h.yaml +85 -0
  545. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21.yaml +106 -0
  546. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter21h.yaml +85 -0
  547. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22.yaml +106 -0
  548. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter22h.yaml +85 -0
  549. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23.yaml +106 -0
  550. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter23h.yaml +85 -0
  551. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24.yaml +106 -0
  552. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter24h.yaml +85 -0
  553. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25.yaml +106 -0
  554. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter25h.yaml +85 -0
  555. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26.yaml +106 -0
  556. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter26h.yaml +85 -0
  557. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27.yaml +106 -0
  558. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter27h.yaml +85 -0
  559. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28.yaml +106 -0
  560. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter28h.yaml +85 -0
  561. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29.yaml +106 -0
  562. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter29h.yaml +85 -0
  563. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3.yaml +106 -0
  564. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30.yaml +106 -0
  565. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter30h.yaml +85 -0
  566. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31.yaml +106 -0
  567. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter31h.yaml +85 -0
  568. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter3h.yaml +85 -0
  569. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4.yaml +106 -0
  570. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter4h.yaml +85 -0
  571. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5.yaml +106 -0
  572. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter5h.yaml +85 -0
  573. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6.yaml +106 -0
  574. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter6h.yaml +85 -0
  575. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7.yaml +106 -0
  576. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter7h.yaml +85 -0
  577. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8.yaml +106 -0
  578. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter8h.yaml +85 -0
  579. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9.yaml +106 -0
  580. data/.data/spec/std/isa/csr/Zihpm/mhpmcounter9h.yaml +85 -0
  581. data/.data/spec/std/isa/csr/Zihpm/mhpmcounterN.layout +104 -0
  582. data/.data/spec/std/isa/csr/Zihpm/mhpmcounterNh.layout +83 -0
  583. data/.data/spec/std/isa/csr/Zihpm/mhpmevent10.yaml +170 -0
  584. data/.data/spec/std/isa/csr/Zihpm/mhpmevent10h.yaml +163 -0
  585. data/.data/spec/std/isa/csr/Zihpm/mhpmevent11.yaml +170 -0
  586. data/.data/spec/std/isa/csr/Zihpm/mhpmevent11h.yaml +163 -0
  587. data/.data/spec/std/isa/csr/Zihpm/mhpmevent12.yaml +170 -0
  588. data/.data/spec/std/isa/csr/Zihpm/mhpmevent12h.yaml +163 -0
  589. data/.data/spec/std/isa/csr/Zihpm/mhpmevent13.yaml +170 -0
  590. data/.data/spec/std/isa/csr/Zihpm/mhpmevent13h.yaml +163 -0
  591. data/.data/spec/std/isa/csr/Zihpm/mhpmevent14.yaml +170 -0
  592. data/.data/spec/std/isa/csr/Zihpm/mhpmevent14h.yaml +163 -0
  593. data/.data/spec/std/isa/csr/Zihpm/mhpmevent15.yaml +170 -0
  594. data/.data/spec/std/isa/csr/Zihpm/mhpmevent15h.yaml +163 -0
  595. data/.data/spec/std/isa/csr/Zihpm/mhpmevent16.yaml +170 -0
  596. data/.data/spec/std/isa/csr/Zihpm/mhpmevent16h.yaml +163 -0
  597. data/.data/spec/std/isa/csr/Zihpm/mhpmevent17.yaml +170 -0
  598. data/.data/spec/std/isa/csr/Zihpm/mhpmevent17h.yaml +163 -0
  599. data/.data/spec/std/isa/csr/Zihpm/mhpmevent18.yaml +170 -0
  600. data/.data/spec/std/isa/csr/Zihpm/mhpmevent18h.yaml +163 -0
  601. data/.data/spec/std/isa/csr/Zihpm/mhpmevent19.yaml +170 -0
  602. data/.data/spec/std/isa/csr/Zihpm/mhpmevent19h.yaml +163 -0
  603. data/.data/spec/std/isa/csr/Zihpm/mhpmevent20.yaml +170 -0
  604. data/.data/spec/std/isa/csr/Zihpm/mhpmevent20h.yaml +163 -0
  605. data/.data/spec/std/isa/csr/Zihpm/mhpmevent21.yaml +170 -0
  606. data/.data/spec/std/isa/csr/Zihpm/mhpmevent21h.yaml +163 -0
  607. data/.data/spec/std/isa/csr/Zihpm/mhpmevent22.yaml +170 -0
  608. data/.data/spec/std/isa/csr/Zihpm/mhpmevent22h.yaml +163 -0
  609. data/.data/spec/std/isa/csr/Zihpm/mhpmevent23.yaml +170 -0
  610. data/.data/spec/std/isa/csr/Zihpm/mhpmevent23h.yaml +163 -0
  611. data/.data/spec/std/isa/csr/Zihpm/mhpmevent24.yaml +170 -0
  612. data/.data/spec/std/isa/csr/Zihpm/mhpmevent24h.yaml +163 -0
  613. data/.data/spec/std/isa/csr/Zihpm/mhpmevent25.yaml +170 -0
  614. data/.data/spec/std/isa/csr/Zihpm/mhpmevent25h.yaml +163 -0
  615. data/.data/spec/std/isa/csr/Zihpm/mhpmevent26.yaml +170 -0
  616. data/.data/spec/std/isa/csr/Zihpm/mhpmevent26h.yaml +163 -0
  617. data/.data/spec/std/isa/csr/Zihpm/mhpmevent27.yaml +170 -0
  618. data/.data/spec/std/isa/csr/Zihpm/mhpmevent27h.yaml +163 -0
  619. data/.data/spec/std/isa/csr/Zihpm/mhpmevent28.yaml +170 -0
  620. data/.data/spec/std/isa/csr/Zihpm/mhpmevent28h.yaml +163 -0
  621. data/.data/spec/std/isa/csr/Zihpm/mhpmevent29.yaml +170 -0
  622. data/.data/spec/std/isa/csr/Zihpm/mhpmevent29h.yaml +163 -0
  623. data/.data/spec/std/isa/csr/Zihpm/mhpmevent3.yaml +170 -0
  624. data/.data/spec/std/isa/csr/Zihpm/mhpmevent30.yaml +170 -0
  625. data/.data/spec/std/isa/csr/Zihpm/mhpmevent30h.yaml +163 -0
  626. data/.data/spec/std/isa/csr/Zihpm/mhpmevent31.yaml +170 -0
  627. data/.data/spec/std/isa/csr/Zihpm/mhpmevent31h.yaml +163 -0
  628. data/.data/spec/std/isa/csr/Zihpm/mhpmevent3h.yaml +163 -0
  629. data/.data/spec/std/isa/csr/Zihpm/mhpmevent4.yaml +170 -0
  630. data/.data/spec/std/isa/csr/Zihpm/mhpmevent4h.yaml +163 -0
  631. data/.data/spec/std/isa/csr/Zihpm/mhpmevent5.yaml +170 -0
  632. data/.data/spec/std/isa/csr/Zihpm/mhpmevent5h.yaml +163 -0
  633. data/.data/spec/std/isa/csr/Zihpm/mhpmevent6.yaml +170 -0
  634. data/.data/spec/std/isa/csr/Zihpm/mhpmevent6h.yaml +163 -0
  635. data/.data/spec/std/isa/csr/Zihpm/mhpmevent7.yaml +170 -0
  636. data/.data/spec/std/isa/csr/Zihpm/mhpmevent7h.yaml +163 -0
  637. data/.data/spec/std/isa/csr/Zihpm/mhpmevent8.yaml +170 -0
  638. data/.data/spec/std/isa/csr/Zihpm/mhpmevent8h.yaml +163 -0
  639. data/.data/spec/std/isa/csr/Zihpm/mhpmevent9.yaml +170 -0
  640. data/.data/spec/std/isa/csr/Zihpm/mhpmevent9h.yaml +163 -0
  641. data/.data/spec/std/isa/csr/Zihpm/mhpmeventN.layout +168 -0
  642. data/.data/spec/std/isa/csr/Zihpm/mhpmeventNh.layout +161 -0
  643. data/.data/spec/std/isa/csr/cycle.yaml +79 -0
  644. data/.data/spec/std/isa/csr/cycleh.yaml +86 -0
  645. data/.data/spec/std/isa/csr/dcsr.yaml +293 -0
  646. data/.data/spec/std/isa/csr/dpc.yaml +45 -0
  647. data/.data/spec/std/isa/csr/dscratch0.yaml +28 -0
  648. data/.data/spec/std/isa/csr/dscratch1.yaml +28 -0
  649. data/.data/spec/std/isa/csr/hcontext.yaml +64 -0
  650. data/.data/spec/std/isa/csr/hedeleg.yaml +243 -0
  651. data/.data/spec/std/isa/csr/hedelegh.yaml +23 -0
  652. data/.data/spec/std/isa/csr/hstateen0.yaml +220 -0
  653. data/.data/spec/std/isa/csr/hstateen0h.yaml +159 -0
  654. data/.data/spec/std/isa/csr/hstateen1.yaml +70 -0
  655. data/.data/spec/std/isa/csr/hstateen1h.yaml +47 -0
  656. data/.data/spec/std/isa/csr/hstateen2.yaml +70 -0
  657. data/.data/spec/std/isa/csr/hstateen2h.yaml +47 -0
  658. data/.data/spec/std/isa/csr/hstateen3.yaml +70 -0
  659. data/.data/spec/std/isa/csr/hstateen3h.yaml +47 -0
  660. data/.data/spec/std/isa/csr/hstatus.yaml +246 -0
  661. data/.data/spec/std/isa/csr/instret.yaml +77 -0
  662. data/.data/spec/std/isa/csr/instreth.yaml +81 -0
  663. data/.data/spec/std/isa/csr/jvt.yaml +89 -0
  664. data/.data/spec/std/isa/csr/marchid.yaml +58 -0
  665. data/.data/spec/std/isa/csr/mcause.yaml +94 -0
  666. data/.data/spec/std/isa/csr/mconfigptr.yaml +61 -0
  667. data/.data/spec/std/isa/csr/mcontext.yaml +55 -0
  668. data/.data/spec/std/isa/csr/mcycle.yaml +67 -0
  669. data/.data/spec/std/isa/csr/mcycleh.yaml +40 -0
  670. data/.data/spec/std/isa/csr/medeleg.yaml +672 -0
  671. data/.data/spec/std/isa/csr/medelegh.yaml +22 -0
  672. data/.data/spec/std/isa/csr/menvcfg.yaml +305 -0
  673. data/.data/spec/std/isa/csr/menvcfgh.yaml +59 -0
  674. data/.data/spec/std/isa/csr/mepc.yaml +54 -0
  675. data/.data/spec/std/isa/csr/mhartid.yaml +26 -0
  676. data/.data/spec/std/isa/csr/mideleg.yaml +204 -0
  677. data/.data/spec/std/isa/csr/mie.yaml +105 -0
  678. data/.data/spec/std/isa/csr/mimpid.yaml +41 -0
  679. data/.data/spec/std/isa/csr/minstret.yaml +54 -0
  680. data/.data/spec/std/isa/csr/minstreth.yaml +39 -0
  681. data/.data/spec/std/isa/csr/mip.yaml +434 -0
  682. data/.data/spec/std/isa/csr/misa.yaml +263 -0
  683. data/.data/spec/std/isa/csr/mscontext.yaml +42 -0
  684. data/.data/spec/std/isa/csr/mscratch.yaml +24 -0
  685. data/.data/spec/std/isa/csr/mseccfg.yaml +25 -0
  686. data/.data/spec/std/isa/csr/mseccfgh.yaml +28 -0
  687. data/.data/spec/std/isa/csr/mstateen0.yaml +182 -0
  688. data/.data/spec/std/isa/csr/mstateen0h.yaml +151 -0
  689. data/.data/spec/std/isa/csr/mstateen1.yaml +65 -0
  690. data/.data/spec/std/isa/csr/mstateen1h.yaml +37 -0
  691. data/.data/spec/std/isa/csr/mstateen2.yaml +65 -0
  692. data/.data/spec/std/isa/csr/mstateen2h.yaml +37 -0
  693. data/.data/spec/std/isa/csr/mstateen3.yaml +65 -0
  694. data/.data/spec/std/isa/csr/mstateen3h.yaml +37 -0
  695. data/.data/spec/std/isa/csr/mstatus.yaml +626 -0
  696. data/.data/spec/std/isa/csr/mstatush.yaml +88 -0
  697. data/.data/spec/std/isa/csr/mtval.yaml +105 -0
  698. data/.data/spec/std/isa/csr/mtvec.yaml +111 -0
  699. data/.data/spec/std/isa/csr/mvendorid.yaml +28 -0
  700. data/.data/spec/std/isa/csr/satp.yaml +184 -0
  701. data/.data/spec/std/isa/csr/scause.yaml +96 -0
  702. data/.data/spec/std/isa/csr/schema.adoc +223 -0
  703. data/.data/spec/std/isa/csr/scontext.yaml +52 -0
  704. data/.data/spec/std/isa/csr/senvcfg.yaml +157 -0
  705. data/.data/spec/std/isa/csr/sepc.yaml +51 -0
  706. data/.data/spec/std/isa/csr/sie.yaml +49 -0
  707. data/.data/spec/std/isa/csr/sip.yaml +160 -0
  708. data/.data/spec/std/isa/csr/sscratch.yaml +23 -0
  709. data/.data/spec/std/isa/csr/sstateen0.yaml +134 -0
  710. data/.data/spec/std/isa/csr/sstateen1.yaml +96 -0
  711. data/.data/spec/std/isa/csr/sstateen2.yaml +96 -0
  712. data/.data/spec/std/isa/csr/sstateen3.yaml +96 -0
  713. data/.data/spec/std/isa/csr/sstatus.yaml +149 -0
  714. data/.data/spec/std/isa/csr/stval.yaml +103 -0
  715. data/.data/spec/std/isa/csr/stvec.yaml +54 -0
  716. data/.data/spec/std/isa/csr/tdata1.yaml +68 -0
  717. data/.data/spec/std/isa/csr/tdata2.yaml +32 -0
  718. data/.data/spec/std/isa/csr/tdata3.yaml +32 -0
  719. data/.data/spec/std/isa/csr/time.yaml +89 -0
  720. data/.data/spec/std/isa/csr/timeh.yaml +90 -0
  721. data/.data/spec/std/isa/csr/tselect.yaml +36 -0
  722. data/.data/spec/std/isa/csr/vscause.yaml +97 -0
  723. data/.data/spec/std/isa/csr/vsepc.yaml +52 -0
  724. data/.data/spec/std/isa/csr/vsstatus.yaml +232 -0
  725. data/.data/spec/std/isa/csr/vstval.yaml +105 -0
  726. data/.data/spec/std/isa/csr/vstvec.yaml +55 -0
  727. data/.data/spec/std/isa/exception_code/Breakpoint.yaml +13 -0
  728. data/.data/spec/std/isa/exception_code/DoubleTrap.yaml +13 -0
  729. data/.data/spec/std/isa/exception_code/HardwareError.yaml +14 -0
  730. data/.data/spec/std/isa/exception_code/IllegalInstruction.yaml +13 -0
  731. data/.data/spec/std/isa/exception_code/InstructionAccessFault.yaml +13 -0
  732. data/.data/spec/std/isa/exception_code/InstructionAddressMisaligned.yaml +13 -0
  733. data/.data/spec/std/isa/exception_code/InstructionGuestPageFault.yaml +13 -0
  734. data/.data/spec/std/isa/exception_code/InstructionPageFault.yaml +13 -0
  735. data/.data/spec/std/isa/exception_code/LoadAccessFault.yaml +13 -0
  736. data/.data/spec/std/isa/exception_code/LoadAddressMisaligned.yaml +13 -0
  737. data/.data/spec/std/isa/exception_code/LoadGuestPageFault.yaml +13 -0
  738. data/.data/spec/std/isa/exception_code/LoadPageFault.yaml +13 -0
  739. data/.data/spec/std/isa/exception_code/Mcall.yaml +13 -0
  740. data/.data/spec/std/isa/exception_code/Scall.yaml +13 -0
  741. data/.data/spec/std/isa/exception_code/SoftwareCheck.yaml +14 -0
  742. data/.data/spec/std/isa/exception_code/StoreAmoAccessFault.yaml +13 -0
  743. data/.data/spec/std/isa/exception_code/StoreAmoAddressMisaligned.yaml +13 -0
  744. data/.data/spec/std/isa/exception_code/StoreAmoGuestPageFault.yaml +13 -0
  745. data/.data/spec/std/isa/exception_code/StoreAmoPageFault.yaml +13 -0
  746. data/.data/spec/std/isa/exception_code/Ucall.yaml +13 -0
  747. data/.data/spec/std/isa/exception_code/VScall.yaml +13 -0
  748. data/.data/spec/std/isa/exception_code/VirtualInstruction.yaml +13 -0
  749. data/.data/spec/std/isa/ext/A.yaml +79 -0
  750. data/.data/spec/std/isa/ext/B.yaml +41 -0
  751. data/.data/spec/std/isa/ext/C.yaml +318 -0
  752. data/.data/spec/std/isa/ext/D.yaml +109 -0
  753. data/.data/spec/std/isa/ext/F.yaml +243 -0
  754. data/.data/spec/std/isa/ext/H.yaml +126 -0
  755. data/.data/spec/std/isa/ext/I.yaml +18 -0
  756. data/.data/spec/std/isa/ext/M.yaml +26 -0
  757. data/.data/spec/std/isa/ext/Q.yaml +26 -0
  758. data/.data/spec/std/isa/ext/S.yaml +41 -0
  759. data/.data/spec/std/isa/ext/Sdext.yaml +16 -0
  760. data/.data/spec/std/isa/ext/Sdtrig.yaml +33 -0
  761. data/.data/spec/std/isa/ext/Sha.yaml +69 -0
  762. data/.data/spec/std/isa/ext/Shcounterenw.yaml +29 -0
  763. data/.data/spec/std/isa/ext/Shgatpa.yaml +42 -0
  764. data/.data/spec/std/isa/ext/Shtvala.yaml +29 -0
  765. data/.data/spec/std/isa/ext/Shvsatpa.yaml +19 -0
  766. data/.data/spec/std/isa/ext/Shvstvala.yaml +61 -0
  767. data/.data/spec/std/isa/ext/Shvstvecd.yaml +26 -0
  768. data/.data/spec/std/isa/ext/Sm.yaml +104 -0
  769. data/.data/spec/std/isa/ext/Smaia.yaml +16 -0
  770. data/.data/spec/std/isa/ext/Smcdeleg.yaml +40 -0
  771. data/.data/spec/std/isa/ext/Smcntrpmf.yaml +16 -0
  772. data/.data/spec/std/isa/ext/Smcsrind.yaml +45 -0
  773. data/.data/spec/std/isa/ext/Smctr.yaml +58 -0
  774. data/.data/spec/std/isa/ext/Smdbltrp.yaml +25 -0
  775. data/.data/spec/std/isa/ext/Smepmp.yaml +36 -0
  776. data/.data/spec/std/isa/ext/Smhpm.yaml +29 -0
  777. data/.data/spec/std/isa/ext/Smmpm.yaml +16 -0
  778. data/.data/spec/std/isa/ext/Smnpm.yaml +17 -0
  779. data/.data/spec/std/isa/ext/Smpmp.yaml +42 -0
  780. data/.data/spec/std/isa/ext/Smrnmi.yaml +24 -0
  781. data/.data/spec/std/isa/ext/Smstateen.yaml +28 -0
  782. data/.data/spec/std/isa/ext/Ssaia.yaml +20 -0
  783. data/.data/spec/std/isa/ext/Ssccfg.yaml +16 -0
  784. data/.data/spec/std/isa/ext/Ssccptr.yaml +26 -0
  785. data/.data/spec/std/isa/ext/Sscofpmf.yaml +19 -0
  786. data/.data/spec/std/isa/ext/Sscounterenw.yaml +30 -0
  787. data/.data/spec/std/isa/ext/Sscsrind.yaml +48 -0
  788. data/.data/spec/std/isa/ext/Ssctr.yaml +23 -0
  789. data/.data/spec/std/isa/ext/Ssdbltrp.yaml +25 -0
  790. data/.data/spec/std/isa/ext/Ssnpm.yaml +17 -0
  791. data/.data/spec/std/isa/ext/Sspm.yaml +23 -0
  792. data/.data/spec/std/isa/ext/Ssqosid.yaml +40 -0
  793. data/.data/spec/std/isa/ext/Ssstateen.yaml +31 -0
  794. data/.data/spec/std/isa/ext/Ssstrict.yaml +52 -0
  795. data/.data/spec/std/isa/ext/Sstc.yaml +16 -0
  796. data/.data/spec/std/isa/ext/Sstvala.yaml +57 -0
  797. data/.data/spec/std/isa/ext/Sstvecd.yaml +29 -0
  798. data/.data/spec/std/isa/ext/Sstvecv.yaml +30 -0
  799. data/.data/spec/std/isa/ext/Ssu32xl.yaml +22 -0
  800. data/.data/spec/std/isa/ext/Ssu64xl.yaml +23 -0
  801. data/.data/spec/std/isa/ext/Ssube.yaml +25 -0
  802. data/.data/spec/std/isa/ext/Supm.yaml +23 -0
  803. data/.data/spec/std/isa/ext/Sv32.yaml +34 -0
  804. data/.data/spec/std/isa/ext/Sv39.yaml +34 -0
  805. data/.data/spec/std/isa/ext/Sv48.yaml +34 -0
  806. data/.data/spec/std/isa/ext/Sv57.yaml +34 -0
  807. data/.data/spec/std/isa/ext/Svade.yaml +53 -0
  808. data/.data/spec/std/isa/ext/Svadu.yaml +136 -0
  809. data/.data/spec/std/isa/ext/Svbare.yaml +28 -0
  810. data/.data/spec/std/isa/ext/Svinval.yaml +86 -0
  811. data/.data/spec/std/isa/ext/Svnapot.yaml +183 -0
  812. data/.data/spec/std/isa/ext/Svpbmt.yaml +29 -0
  813. data/.data/spec/std/isa/ext/Svrsw60t59b.yaml +39 -0
  814. data/.data/spec/std/isa/ext/Svvptc.yaml +37 -0
  815. data/.data/spec/std/isa/ext/U.yaml +17 -0
  816. data/.data/spec/std/isa/ext/V.yaml +21 -0
  817. data/.data/spec/std/isa/ext/Xmock.yaml +30 -0
  818. data/.data/spec/std/isa/ext/Za128rs.yaml +30 -0
  819. data/.data/spec/std/isa/ext/Za64rs.yaml +32 -0
  820. data/.data/spec/std/isa/ext/Zaamo.yaml +136 -0
  821. data/.data/spec/std/isa/ext/Zabha.yaml +19 -0
  822. data/.data/spec/std/isa/ext/Zacas.yaml +19 -0
  823. data/.data/spec/std/isa/ext/Zalasr.yaml +16 -0
  824. data/.data/spec/std/isa/ext/Zalrsc.yaml +316 -0
  825. data/.data/spec/std/isa/ext/Zama16b.yaml +24 -0
  826. data/.data/spec/std/isa/ext/Zawrs.yaml +25 -0
  827. data/.data/spec/std/isa/ext/Zba.yaml +66 -0
  828. data/.data/spec/std/isa/ext/Zbb.yaml +54 -0
  829. data/.data/spec/std/isa/ext/Zbc.yaml +54 -0
  830. data/.data/spec/std/isa/ext/Zbkb.yaml +18 -0
  831. data/.data/spec/std/isa/ext/Zbkc.yaml +23 -0
  832. data/.data/spec/std/isa/ext/Zbkx.yaml +24 -0
  833. data/.data/spec/std/isa/ext/Zbs.yaml +59 -0
  834. data/.data/spec/std/isa/ext/Zca.yaml +46 -0
  835. data/.data/spec/std/isa/ext/Zcb.yaml +45 -0
  836. data/.data/spec/std/isa/ext/Zcd.yaml +47 -0
  837. data/.data/spec/std/isa/ext/Zce.yaml +99 -0
  838. data/.data/spec/std/isa/ext/Zcf.yaml +46 -0
  839. data/.data/spec/std/isa/ext/Zclsd.yaml +28 -0
  840. data/.data/spec/std/isa/ext/Zcmop.yaml +58 -0
  841. data/.data/spec/std/isa/ext/Zcmp.yaml +100 -0
  842. data/.data/spec/std/isa/ext/Zcmt.yaml +75 -0
  843. data/.data/spec/std/isa/ext/Zdinx.yaml +49 -0
  844. data/.data/spec/std/isa/ext/Zfa.yaml +24 -0
  845. data/.data/spec/std/isa/ext/Zfbfmin.yaml +27 -0
  846. data/.data/spec/std/isa/ext/Zfh.yaml +24 -0
  847. data/.data/spec/std/isa/ext/Zfhmin.yaml +55 -0
  848. data/.data/spec/std/isa/ext/Zfinx.yaml +56 -0
  849. data/.data/spec/std/isa/ext/Zhinx.yaml +26 -0
  850. data/.data/spec/std/isa/ext/Zhinxmin.yaml +29 -0
  851. data/.data/spec/std/isa/ext/Zic64b.yaml +31 -0
  852. data/.data/spec/std/isa/ext/Zicbom.yaml +15 -0
  853. data/.data/spec/std/isa/ext/Zicbop.yaml +15 -0
  854. data/.data/spec/std/isa/ext/Zicboz.yaml +15 -0
  855. data/.data/spec/std/isa/ext/Ziccamoa.yaml +19 -0
  856. data/.data/spec/std/isa/ext/Ziccamoc.yaml +23 -0
  857. data/.data/spec/std/isa/ext/Ziccif.yaml +21 -0
  858. data/.data/spec/std/isa/ext/Zicclsm.yaml +31 -0
  859. data/.data/spec/std/isa/ext/Ziccrse.yaml +19 -0
  860. data/.data/spec/std/isa/ext/Zicfilp.yaml +16 -0
  861. data/.data/spec/std/isa/ext/Zicfiss.yaml +16 -0
  862. data/.data/spec/std/isa/ext/Zicntr.yaml +20 -0
  863. data/.data/spec/std/isa/ext/Zicond.yaml +24 -0
  864. data/.data/spec/std/isa/ext/Zicsr.yaml +15 -0
  865. data/.data/spec/std/isa/ext/Zifencei.yaml +75 -0
  866. data/.data/spec/std/isa/ext/Zihintntl.yaml +201 -0
  867. data/.data/spec/std/isa/ext/Zihintpause.yaml +76 -0
  868. data/.data/spec/std/isa/ext/Zihpm.yaml +18 -0
  869. data/.data/spec/std/isa/ext/Zilsd.yaml +20 -0
  870. data/.data/spec/std/isa/ext/Zimop.yaml +70 -0
  871. data/.data/spec/std/isa/ext/Zk.yaml +42 -0
  872. data/.data/spec/std/isa/ext/Zkn.yaml +57 -0
  873. data/.data/spec/std/isa/ext/Zknd.yaml +19 -0
  874. data/.data/spec/std/isa/ext/Zkne.yaml +19 -0
  875. data/.data/spec/std/isa/ext/Zknh.yaml +19 -0
  876. data/.data/spec/std/isa/ext/Zkr.yaml +20 -0
  877. data/.data/spec/std/isa/ext/Zks.yaml +53 -0
  878. data/.data/spec/std/isa/ext/Zksed.yaml +20 -0
  879. data/.data/spec/std/isa/ext/Zksh.yaml +19 -0
  880. data/.data/spec/std/isa/ext/Zkt.yaml +365 -0
  881. data/.data/spec/std/isa/ext/Zmmul.yaml +28 -0
  882. data/.data/spec/std/isa/ext/Ztso.yaml +23 -0
  883. data/.data/spec/std/isa/ext/Zvbb.yaml +20 -0
  884. data/.data/spec/std/isa/ext/Zvbc.yaml +19 -0
  885. data/.data/spec/std/isa/ext/Zve32f.yaml +34 -0
  886. data/.data/spec/std/isa/ext/Zve32x.yaml +38 -0
  887. data/.data/spec/std/isa/ext/Zve64d.yaml +35 -0
  888. data/.data/spec/std/isa/ext/Zve64f.yaml +33 -0
  889. data/.data/spec/std/isa/ext/Zve64x.yaml +35 -0
  890. data/.data/spec/std/isa/ext/Zvfbfmin.yaml +23 -0
  891. data/.data/spec/std/isa/ext/Zvfbfwma.yaml +23 -0
  892. data/.data/spec/std/isa/ext/Zvfh.yaml +43 -0
  893. data/.data/spec/std/isa/ext/Zvfhmin.yaml +26 -0
  894. data/.data/spec/std/isa/ext/Zvkb.yaml +16 -0
  895. data/.data/spec/std/isa/ext/Zvkg.yaml +26 -0
  896. data/.data/spec/std/isa/ext/Zvkn.yaml +32 -0
  897. data/.data/spec/std/isa/ext/Zvknc.yaml +27 -0
  898. data/.data/spec/std/isa/ext/Zvkned.yaml +22 -0
  899. data/.data/spec/std/isa/ext/Zvkng.yaml +27 -0
  900. data/.data/spec/std/isa/ext/Zvknha.yaml +17 -0
  901. data/.data/spec/std/isa/ext/Zvknhb.yaml +21 -0
  902. data/.data/spec/std/isa/ext/Zvks.yaml +32 -0
  903. data/.data/spec/std/isa/ext/Zvksc.yaml +27 -0
  904. data/.data/spec/std/isa/ext/Zvksed.yaml +24 -0
  905. data/.data/spec/std/isa/ext/Zvksg.yaml +27 -0
  906. data/.data/spec/std/isa/ext/Zvksh.yaml +20 -0
  907. data/.data/spec/std/isa/ext/Zvkt.yaml +28 -0
  908. data/.data/spec/std/isa/ext/Zvl1024b.yaml +30 -0
  909. data/.data/spec/std/isa/ext/Zvl128b.yaml +31 -0
  910. data/.data/spec/std/isa/ext/Zvl256b.yaml +30 -0
  911. data/.data/spec/std/isa/ext/Zvl32b.yaml +28 -0
  912. data/.data/spec/std/isa/ext/Zvl512b.yaml +30 -0
  913. data/.data/spec/std/isa/ext/Zvl64b.yaml +31 -0
  914. data/.data/spec/std/isa/inst/B/andn.yaml +69 -0
  915. data/.data/spec/std/isa/inst/B/clmul.yaml +66 -0
  916. data/.data/spec/std/isa/inst/B/clmulh.yaml +66 -0
  917. data/.data/spec/std/isa/inst/B/orn.yaml +68 -0
  918. data/.data/spec/std/isa/inst/B/rev8.yaml +77 -0
  919. data/.data/spec/std/isa/inst/B/rol.yaml +70 -0
  920. data/.data/spec/std/isa/inst/B/rolw.yaml +65 -0
  921. data/.data/spec/std/isa/inst/B/ror.yaml +70 -0
  922. data/.data/spec/std/isa/inst/B/rori.yaml +66 -0
  923. data/.data/spec/std/isa/inst/B/roriw.yaml +58 -0
  924. data/.data/spec/std/isa/inst/B/rorw.yaml +65 -0
  925. data/.data/spec/std/isa/inst/B/xnor.yaml +68 -0
  926. data/.data/spec/std/isa/inst/C/c.add.yaml +52 -0
  927. data/.data/spec/std/isa/inst/C/c.addi.yaml +38 -0
  928. data/.data/spec/std/isa/inst/C/c.addi16sp.yaml +36 -0
  929. data/.data/spec/std/isa/inst/C/c.addi4spn.yaml +38 -0
  930. data/.data/spec/std/isa/inst/C/c.addiw.yaml +39 -0
  931. data/.data/spec/std/isa/inst/C/c.addw.yaml +55 -0
  932. data/.data/spec/std/isa/inst/C/c.and.yaml +64 -0
  933. data/.data/spec/std/isa/inst/C/c.andi.yaml +53 -0
  934. data/.data/spec/std/isa/inst/C/c.beqz.yaml +75 -0
  935. data/.data/spec/std/isa/inst/C/c.bnez.yaml +75 -0
  936. data/.data/spec/std/isa/inst/C/c.ebreak.yaml +53 -0
  937. data/.data/spec/std/isa/inst/C/c.j.yaml +34 -0
  938. data/.data/spec/std/isa/inst/C/c.jal.yaml +39 -0
  939. data/.data/spec/std/isa/inst/C/c.jalr.yaml +37 -0
  940. data/.data/spec/std/isa/inst/C/c.jr.yaml +33 -0
  941. data/.data/spec/std/isa/inst/C/c.ld.yaml +101 -0
  942. data/.data/spec/std/isa/inst/C/c.ldsp.yaml +64 -0
  943. data/.data/spec/std/isa/inst/C/c.li.yaml +36 -0
  944. data/.data/spec/std/isa/inst/C/c.lui.yaml +38 -0
  945. data/.data/spec/std/isa/inst/C/c.lw.yaml +74 -0
  946. data/.data/spec/std/isa/inst/C/c.lwsp.yaml +41 -0
  947. data/.data/spec/std/isa/inst/C/c.mv.yaml +48 -0
  948. data/.data/spec/std/isa/inst/C/c.nop.yaml +26 -0
  949. data/.data/spec/std/isa/inst/C/c.or.yaml +64 -0
  950. data/.data/spec/std/isa/inst/C/c.sd.yaml +67 -0
  951. data/.data/spec/std/isa/inst/C/c.sdsp.yaml +63 -0
  952. data/.data/spec/std/isa/inst/C/c.slli.yaml +65 -0
  953. data/.data/spec/std/isa/inst/C/c.srai.yaml +66 -0
  954. data/.data/spec/std/isa/inst/C/c.srli.yaml +66 -0
  955. data/.data/spec/std/isa/inst/C/c.sub.yaml +64 -0
  956. data/.data/spec/std/isa/inst/C/c.subw.yaml +55 -0
  957. data/.data/spec/std/isa/inst/C/c.sw.yaml +41 -0
  958. data/.data/spec/std/isa/inst/C/c.swsp.yaml +39 -0
  959. data/.data/spec/std/isa/inst/C/c.xor.yaml +64 -0
  960. data/.data/spec/std/isa/inst/D/fadd.d.yaml +36 -0
  961. data/.data/spec/std/isa/inst/D/fclass.d.yaml +53 -0
  962. data/.data/spec/std/isa/inst/D/fcvt.d.l.yaml +36 -0
  963. data/.data/spec/std/isa/inst/D/fcvt.d.lu.yaml +36 -0
  964. data/.data/spec/std/isa/inst/D/fcvt.d.s.yaml +36 -0
  965. data/.data/spec/std/isa/inst/D/fcvt.d.w.yaml +35 -0
  966. data/.data/spec/std/isa/inst/D/fcvt.d.wu.yaml +35 -0
  967. data/.data/spec/std/isa/inst/D/fcvt.l.d.yaml +36 -0
  968. data/.data/spec/std/isa/inst/D/fcvt.lu.d.yaml +36 -0
  969. data/.data/spec/std/isa/inst/D/fcvt.s.d.yaml +36 -0
  970. data/.data/spec/std/isa/inst/D/fcvt.w.d.yaml +34 -0
  971. data/.data/spec/std/isa/inst/D/fcvt.wu.d.yaml +34 -0
  972. data/.data/spec/std/isa/inst/D/fcvtmod.w.d.yaml +42 -0
  973. data/.data/spec/std/isa/inst/D/fdiv.d.yaml +36 -0
  974. data/.data/spec/std/isa/inst/D/feq.d.yaml +34 -0
  975. data/.data/spec/std/isa/inst/D/fld.yaml +34 -0
  976. data/.data/spec/std/isa/inst/D/fle.d.yaml +34 -0
  977. data/.data/spec/std/isa/inst/D/fleq.d.yaml +34 -0
  978. data/.data/spec/std/isa/inst/D/fli.d.yaml +32 -0
  979. data/.data/spec/std/isa/inst/D/flt.d.yaml +34 -0
  980. data/.data/spec/std/isa/inst/D/fltq.d.yaml +34 -0
  981. data/.data/spec/std/isa/inst/D/fmadd.d.yaml +37 -0
  982. data/.data/spec/std/isa/inst/D/fmax.d.yaml +36 -0
  983. data/.data/spec/std/isa/inst/D/fmaxm.d.yaml +34 -0
  984. data/.data/spec/std/isa/inst/D/fmin.d.yaml +36 -0
  985. data/.data/spec/std/isa/inst/D/fminm.d.yaml +34 -0
  986. data/.data/spec/std/isa/inst/D/fmsub.d.yaml +37 -0
  987. data/.data/spec/std/isa/inst/D/fmul.d.yaml +37 -0
  988. data/.data/spec/std/isa/inst/D/fmv.d.x.yaml +32 -0
  989. data/.data/spec/std/isa/inst/D/fmv.x.d.yaml +32 -0
  990. data/.data/spec/std/isa/inst/D/fmvh.x.d.yaml +35 -0
  991. data/.data/spec/std/isa/inst/D/fmvp.d.x.yaml +37 -0
  992. data/.data/spec/std/isa/inst/D/fnmadd.d.yaml +38 -0
  993. data/.data/spec/std/isa/inst/D/fnmsub.d.yaml +38 -0
  994. data/.data/spec/std/isa/inst/D/fround.d.yaml +38 -0
  995. data/.data/spec/std/isa/inst/D/froundnx.d.yaml +34 -0
  996. data/.data/spec/std/isa/inst/D/fsd.yaml +33 -0
  997. data/.data/spec/std/isa/inst/D/fsgnj.d.yaml +36 -0
  998. data/.data/spec/std/isa/inst/D/fsgnjn.d.yaml +36 -0
  999. data/.data/spec/std/isa/inst/D/fsgnjx.d.yaml +36 -0
  1000. data/.data/spec/std/isa/inst/D/fsqrt.d.yaml +35 -0
  1001. data/.data/spec/std/isa/inst/D/fsub.d.yaml +36 -0
  1002. data/.data/spec/std/isa/inst/F/fadd.s.yaml +63 -0
  1003. data/.data/spec/std/isa/inst/F/fclass.s.yaml +90 -0
  1004. data/.data/spec/std/isa/inst/F/fcvt.l.s.yaml +56 -0
  1005. data/.data/spec/std/isa/inst/F/fcvt.lu.s.yaml +56 -0
  1006. data/.data/spec/std/isa/inst/F/fcvt.s.l.yaml +56 -0
  1007. data/.data/spec/std/isa/inst/F/fcvt.s.lu.yaml +55 -0
  1008. data/.data/spec/std/isa/inst/F/fcvt.s.w.yaml +67 -0
  1009. data/.data/spec/std/isa/inst/F/fcvt.s.wu.yaml +66 -0
  1010. data/.data/spec/std/isa/inst/F/fcvt.w.s.yaml +85 -0
  1011. data/.data/spec/std/isa/inst/F/fcvt.wu.s.yaml +83 -0
  1012. data/.data/spec/std/isa/inst/F/fdiv.s.yaml +60 -0
  1013. data/.data/spec/std/isa/inst/F/feq.s.yaml +68 -0
  1014. data/.data/spec/std/isa/inst/F/fle.s.yaml +68 -0
  1015. data/.data/spec/std/isa/inst/F/fleq.s.yaml +50 -0
  1016. data/.data/spec/std/isa/inst/F/flt.s.yaml +70 -0
  1017. data/.data/spec/std/isa/inst/F/fltq.s.yaml +50 -0
  1018. data/.data/spec/std/isa/inst/F/flw.yaml +80 -0
  1019. data/.data/spec/std/isa/inst/F/fmadd.s.yaml +63 -0
  1020. data/.data/spec/std/isa/inst/F/fmax.s.yaml +59 -0
  1021. data/.data/spec/std/isa/inst/F/fmin.s.yaml +59 -0
  1022. data/.data/spec/std/isa/inst/F/fmsub.s.yaml +63 -0
  1023. data/.data/spec/std/isa/inst/F/fmul.s.yaml +60 -0
  1024. data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +55 -0
  1025. data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +48 -0
  1026. data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +64 -0
  1027. data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +64 -0
  1028. data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +68 -0
  1029. data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +67 -0
  1030. data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +66 -0
  1031. data/.data/spec/std/isa/inst/F/fsqrt.s.yaml +53 -0
  1032. data/.data/spec/std/isa/inst/F/fsub.s.yaml +61 -0
  1033. data/.data/spec/std/isa/inst/F/fsw.yaml +82 -0
  1034. data/.data/spec/std/isa/inst/H/hfence.gvma.yaml +33 -0
  1035. data/.data/spec/std/isa/inst/H/hfence.vvma.yaml +34 -0
  1036. data/.data/spec/std/isa/inst/H/hlv.b.yaml +30 -0
  1037. data/.data/spec/std/isa/inst/H/hlv.bu.yaml +30 -0
  1038. data/.data/spec/std/isa/inst/H/hlv.d.yaml +32 -0
  1039. data/.data/spec/std/isa/inst/H/hlv.h.yaml +30 -0
  1040. data/.data/spec/std/isa/inst/H/hlv.hu.yaml +30 -0
  1041. data/.data/spec/std/isa/inst/H/hlv.w.yaml +30 -0
  1042. data/.data/spec/std/isa/inst/H/hlv.wu.yaml +32 -0
  1043. data/.data/spec/std/isa/inst/H/hlvx.hu.yaml +32 -0
  1044. data/.data/spec/std/isa/inst/H/hlvx.wu.yaml +32 -0
  1045. data/.data/spec/std/isa/inst/H/hsv.b.yaml +30 -0
  1046. data/.data/spec/std/isa/inst/H/hsv.d.yaml +32 -0
  1047. data/.data/spec/std/isa/inst/H/hsv.h.yaml +30 -0
  1048. data/.data/spec/std/isa/inst/H/hsv.w.yaml +30 -0
  1049. data/.data/spec/std/isa/inst/I/add.yaml +68 -0
  1050. data/.data/spec/std/isa/inst/I/addi.yaml +58 -0
  1051. data/.data/spec/std/isa/inst/I/addiw.yaml +50 -0
  1052. data/.data/spec/std/isa/inst/I/addw.yaml +57 -0
  1053. data/.data/spec/std/isa/inst/I/and.yaml +61 -0
  1054. data/.data/spec/std/isa/inst/I/andi.yaml +54 -0
  1055. data/.data/spec/std/isa/inst/I/auipc.yaml +47 -0
  1056. data/.data/spec/std/isa/inst/I/beq.yaml +82 -0
  1057. data/.data/spec/std/isa/inst/I/bge.yaml +84 -0
  1058. data/.data/spec/std/isa/inst/I/bgeu.yaml +79 -0
  1059. data/.data/spec/std/isa/inst/I/blt.yaml +84 -0
  1060. data/.data/spec/std/isa/inst/I/bltu.yaml +79 -0
  1061. data/.data/spec/std/isa/inst/I/bne.yaml +82 -0
  1062. data/.data/spec/std/isa/inst/I/ebreak.yaml +50 -0
  1063. data/.data/spec/std/isa/inst/I/ecall.yaml +81 -0
  1064. data/.data/spec/std/isa/inst/I/fence.tso.yaml +52 -0
  1065. data/.data/spec/std/isa/inst/I/fence.yaml +224 -0
  1066. data/.data/spec/std/isa/inst/I/jal.yaml +69 -0
  1067. data/.data/spec/std/isa/inst/I/jalr.yaml +79 -0
  1068. data/.data/spec/std/isa/inst/I/lb.yaml +68 -0
  1069. data/.data/spec/std/isa/inst/I/lbu.yaml +68 -0
  1070. data/.data/spec/std/isa/inst/I/ld.yaml +98 -0
  1071. data/.data/spec/std/isa/inst/I/lh.yaml +68 -0
  1072. data/.data/spec/std/isa/inst/I/lhu.yaml +68 -0
  1073. data/.data/spec/std/isa/inst/I/lui.yaml +45 -0
  1074. data/.data/spec/std/isa/inst/I/lw.yaml +68 -0
  1075. data/.data/spec/std/isa/inst/I/lwu.yaml +70 -0
  1076. data/.data/spec/std/isa/inst/I/mret.yaml +61 -0
  1077. data/.data/spec/std/isa/inst/I/or.yaml +61 -0
  1078. data/.data/spec/std/isa/inst/I/ori.yaml +56 -0
  1079. data/.data/spec/std/isa/inst/I/sb.yaml +82 -0
  1080. data/.data/spec/std/isa/inst/I/sd.yaml +110 -0
  1081. data/.data/spec/std/isa/inst/I/sh.yaml +82 -0
  1082. data/.data/spec/std/isa/inst/I/sll.yaml +67 -0
  1083. data/.data/spec/std/isa/inst/I/slli.yaml +66 -0
  1084. data/.data/spec/std/isa/inst/I/slliw.yaml +53 -0
  1085. data/.data/spec/std/isa/inst/I/sllw.yaml +53 -0
  1086. data/.data/spec/std/isa/inst/I/slt.yaml +72 -0
  1087. data/.data/spec/std/isa/inst/I/slti.yaml +54 -0
  1088. data/.data/spec/std/isa/inst/I/sltiu.yaml +62 -0
  1089. data/.data/spec/std/isa/inst/I/sltu.yaml +67 -0
  1090. data/.data/spec/std/isa/inst/I/sra.yaml +67 -0
  1091. data/.data/spec/std/isa/inst/I/srai.yaml +68 -0
  1092. data/.data/spec/std/isa/inst/I/sraiw.yaml +54 -0
  1093. data/.data/spec/std/isa/inst/I/sraw.yaml +56 -0
  1094. data/.data/spec/std/isa/inst/I/srl.yaml +67 -0
  1095. data/.data/spec/std/isa/inst/I/srli.yaml +65 -0
  1096. data/.data/spec/std/isa/inst/I/srliw.yaml +55 -0
  1097. data/.data/spec/std/isa/inst/I/srlw.yaml +53 -0
  1098. data/.data/spec/std/isa/inst/I/sub.yaml +67 -0
  1099. data/.data/spec/std/isa/inst/I/subw.yaml +60 -0
  1100. data/.data/spec/std/isa/inst/I/sw.yaml +82 -0
  1101. data/.data/spec/std/isa/inst/I/wfi.yaml +131 -0
  1102. data/.data/spec/std/isa/inst/I/xor.yaml +61 -0
  1103. data/.data/spec/std/isa/inst/I/xori.yaml +56 -0
  1104. data/.data/spec/std/isa/inst/M/div.yaml +82 -0
  1105. data/.data/spec/std/isa/inst/M/divu.yaml +71 -0
  1106. data/.data/spec/std/isa/inst/M/divuw.yaml +78 -0
  1107. data/.data/spec/std/isa/inst/M/divw.yaml +85 -0
  1108. data/.data/spec/std/isa/inst/M/mul.yaml +95 -0
  1109. data/.data/spec/std/isa/inst/M/mulh.yaml +80 -0
  1110. data/.data/spec/std/isa/inst/M/mulhsu.yaml +77 -0
  1111. data/.data/spec/std/isa/inst/M/mulhu.yaml +76 -0
  1112. data/.data/spec/std/isa/inst/M/mulw.yaml +79 -0
  1113. data/.data/spec/std/isa/inst/M/rem.yaml +76 -0
  1114. data/.data/spec/std/isa/inst/M/remu.yaml +66 -0
  1115. data/.data/spec/std/isa/inst/M/remuw.yaml +79 -0
  1116. data/.data/spec/std/isa/inst/M/remw.yaml +84 -0
  1117. data/.data/spec/std/isa/inst/Q/fadd.q.yaml +34 -0
  1118. data/.data/spec/std/isa/inst/Q/fclass.q.yaml +53 -0
  1119. data/.data/spec/std/isa/inst/Q/fcvt.d.q.yaml +31 -0
  1120. data/.data/spec/std/isa/inst/Q/fcvt.h.q.yaml +33 -0
  1121. data/.data/spec/std/isa/inst/Q/fcvt.l.q.yaml +33 -0
  1122. data/.data/spec/std/isa/inst/Q/fcvt.lu.q.yaml +33 -0
  1123. data/.data/spec/std/isa/inst/Q/fcvt.q.d.yaml +31 -0
  1124. data/.data/spec/std/isa/inst/Q/fcvt.q.h.yaml +33 -0
  1125. data/.data/spec/std/isa/inst/Q/fcvt.q.l.yaml +33 -0
  1126. data/.data/spec/std/isa/inst/Q/fcvt.q.lu.yaml +33 -0
  1127. data/.data/spec/std/isa/inst/Q/fcvt.q.s.yaml +31 -0
  1128. data/.data/spec/std/isa/inst/Q/fcvt.q.w.yaml +31 -0
  1129. data/.data/spec/std/isa/inst/Q/fcvt.q.wu.yaml +31 -0
  1130. data/.data/spec/std/isa/inst/Q/fcvt.s.q.yaml +31 -0
  1131. data/.data/spec/std/isa/inst/Q/fcvt.w.q.yaml +31 -0
  1132. data/.data/spec/std/isa/inst/Q/fcvt.wu.q.yaml +31 -0
  1133. data/.data/spec/std/isa/inst/Q/fdiv.q.yaml +40 -0
  1134. data/.data/spec/std/isa/inst/Q/feq.q.yaml +37 -0
  1135. data/.data/spec/std/isa/inst/Q/fle.q.yaml +37 -0
  1136. data/.data/spec/std/isa/inst/Q/fleq.q.yaml +38 -0
  1137. data/.data/spec/std/isa/inst/Q/fli.q.yaml +33 -0
  1138. data/.data/spec/std/isa/inst/Q/flq.yaml +37 -0
  1139. data/.data/spec/std/isa/inst/Q/flt.q.yaml +38 -0
  1140. data/.data/spec/std/isa/inst/Q/fltq.q.yaml +38 -0
  1141. data/.data/spec/std/isa/inst/Q/fmadd.q.yaml +40 -0
  1142. data/.data/spec/std/isa/inst/Q/fmax.q.yaml +35 -0
  1143. data/.data/spec/std/isa/inst/Q/fmaxm.q.yaml +38 -0
  1144. data/.data/spec/std/isa/inst/Q/fmin.q.yaml +35 -0
  1145. data/.data/spec/std/isa/inst/Q/fminm.q.yaml +38 -0
  1146. data/.data/spec/std/isa/inst/Q/fmsub.q.yaml +36 -0
  1147. data/.data/spec/std/isa/inst/Q/fmul.q.yaml +33 -0
  1148. data/.data/spec/std/isa/inst/Q/fmvh.x.q.yaml +37 -0
  1149. data/.data/spec/std/isa/inst/Q/fmvp.q.x.yaml +39 -0
  1150. data/.data/spec/std/isa/inst/Q/fnmadd.q.yaml +37 -0
  1151. data/.data/spec/std/isa/inst/Q/fnmsub.q.yaml +37 -0
  1152. data/.data/spec/std/isa/inst/Q/fround.q.yaml +38 -0
  1153. data/.data/spec/std/isa/inst/Q/froundnx.q.yaml +34 -0
  1154. data/.data/spec/std/isa/inst/Q/fsgnj.q.yaml +36 -0
  1155. data/.data/spec/std/isa/inst/Q/fsgnjn.q.yaml +36 -0
  1156. data/.data/spec/std/isa/inst/Q/fsgnjx.q.yaml +36 -0
  1157. data/.data/spec/std/isa/inst/Q/fsq.yaml +36 -0
  1158. data/.data/spec/std/isa/inst/Q/fsqrt.q.yaml +31 -0
  1159. data/.data/spec/std/isa/inst/Q/fsub.q.yaml +34 -0
  1160. data/.data/spec/std/isa/inst/README.md +78 -0
  1161. data/.data/spec/std/isa/inst/S/sfence.vma.yaml +331 -0
  1162. data/.data/spec/std/isa/inst/S/sret.yaml +166 -0
  1163. data/.data/spec/std/isa/inst/Sdext/dret.yaml +25 -0
  1164. data/.data/spec/std/isa/inst/Smdbltrp/sctrclr.yaml +47 -0
  1165. data/.data/spec/std/isa/inst/Smrnmi/mnret.yaml +51 -0
  1166. data/.data/spec/std/isa/inst/Svinval/hinval.gvma.yaml +91 -0
  1167. data/.data/spec/std/isa/inst/Svinval/hinval.vvma.yaml +91 -0
  1168. data/.data/spec/std/isa/inst/Svinval/sfence.inval.ir.yaml +44 -0
  1169. data/.data/spec/std/isa/inst/Svinval/sfence.w.inval.yaml +45 -0
  1170. data/.data/spec/std/isa/inst/Svinval/sinval.vma.yaml +102 -0
  1171. data/.data/spec/std/isa/inst/V/vaadd.vv.yaml +116 -0
  1172. data/.data/spec/std/isa/inst/V/vaadd.vx.yaml +125 -0
  1173. data/.data/spec/std/isa/inst/V/vaaddu.vv.yaml +116 -0
  1174. data/.data/spec/std/isa/inst/V/vaaddu.vx.yaml +125 -0
  1175. data/.data/spec/std/isa/inst/V/vadc.vim.yaml +75 -0
  1176. data/.data/spec/std/isa/inst/V/vadc.vvm.yaml +76 -0
  1177. data/.data/spec/std/isa/inst/V/vadc.vxm.yaml +76 -0
  1178. data/.data/spec/std/isa/inst/V/vadd.vi.yaml +101 -0
  1179. data/.data/spec/std/isa/inst/V/vadd.vv.yaml +158 -0
  1180. data/.data/spec/std/isa/inst/V/vadd.vx.yaml +117 -0
  1181. data/.data/spec/std/isa/inst/V/vand.vi.yaml +101 -0
  1182. data/.data/spec/std/isa/inst/V/vand.vv.yaml +134 -0
  1183. data/.data/spec/std/isa/inst/V/vand.vx.yaml +117 -0
  1184. data/.data/spec/std/isa/inst/V/vasub.vv.yaml +116 -0
  1185. data/.data/spec/std/isa/inst/V/vasub.vx.yaml +125 -0
  1186. data/.data/spec/std/isa/inst/V/vasubu.vv.yaml +116 -0
  1187. data/.data/spec/std/isa/inst/V/vasubu.vx.yaml +125 -0
  1188. data/.data/spec/std/isa/inst/V/vcompress.vm.yaml +85 -0
  1189. data/.data/spec/std/isa/inst/V/vcpop.m.yaml +31 -0
  1190. data/.data/spec/std/isa/inst/V/vdiv.vv.yaml +116 -0
  1191. data/.data/spec/std/isa/inst/V/vdiv.vx.yaml +125 -0
  1192. data/.data/spec/std/isa/inst/V/vdivu.vv.yaml +116 -0
  1193. data/.data/spec/std/isa/inst/V/vdivu.vx.yaml +125 -0
  1194. data/.data/spec/std/isa/inst/V/vfadd.vf.yaml +92 -0
  1195. data/.data/spec/std/isa/inst/V/vfadd.vv.yaml +81 -0
  1196. data/.data/spec/std/isa/inst/V/vfclass.v.yaml +97 -0
  1197. data/.data/spec/std/isa/inst/V/vfcvt.f.x.v.yaml +122 -0
  1198. data/.data/spec/std/isa/inst/V/vfcvt.f.xu.v.yaml +122 -0
  1199. data/.data/spec/std/isa/inst/V/vfcvt.rtz.x.f.v.yaml +122 -0
  1200. data/.data/spec/std/isa/inst/V/vfcvt.rtz.xu.f.v.yaml +122 -0
  1201. data/.data/spec/std/isa/inst/V/vfcvt.x.f.v.yaml +122 -0
  1202. data/.data/spec/std/isa/inst/V/vfcvt.xu.f.v.yaml +122 -0
  1203. data/.data/spec/std/isa/inst/V/vfdiv.vf.yaml +92 -0
  1204. data/.data/spec/std/isa/inst/V/vfdiv.vv.yaml +81 -0
  1205. data/.data/spec/std/isa/inst/V/vfirst.m.yaml +66 -0
  1206. data/.data/spec/std/isa/inst/V/vfmacc.vf.yaml +80 -0
  1207. data/.data/spec/std/isa/inst/V/vfmacc.vv.yaml +80 -0
  1208. data/.data/spec/std/isa/inst/V/vfmadd.vf.yaml +80 -0
  1209. data/.data/spec/std/isa/inst/V/vfmadd.vv.yaml +80 -0
  1210. data/.data/spec/std/isa/inst/V/vfmax.vf.yaml +92 -0
  1211. data/.data/spec/std/isa/inst/V/vfmax.vv.yaml +81 -0
  1212. data/.data/spec/std/isa/inst/V/vfmerge.vfm.yaml +78 -0
  1213. data/.data/spec/std/isa/inst/V/vfmin.vf.yaml +92 -0
  1214. data/.data/spec/std/isa/inst/V/vfmin.vv.yaml +81 -0
  1215. data/.data/spec/std/isa/inst/V/vfmsac.vf.yaml +80 -0
  1216. data/.data/spec/std/isa/inst/V/vfmsac.vv.yaml +80 -0
  1217. data/.data/spec/std/isa/inst/V/vfmsub.vf.yaml +80 -0
  1218. data/.data/spec/std/isa/inst/V/vfmsub.vv.yaml +80 -0
  1219. data/.data/spec/std/isa/inst/V/vfmul.vf.yaml +92 -0
  1220. data/.data/spec/std/isa/inst/V/vfmul.vv.yaml +81 -0
  1221. data/.data/spec/std/isa/inst/V/vfmv.f.s.yaml +58 -0
  1222. data/.data/spec/std/isa/inst/V/vfmv.s.f.yaml +71 -0
  1223. data/.data/spec/std/isa/inst/V/vfmv.v.f.yaml +64 -0
  1224. data/.data/spec/std/isa/inst/V/vfncvt.f.f.w.yaml +145 -0
  1225. data/.data/spec/std/isa/inst/V/vfncvt.f.x.w.yaml +145 -0
  1226. data/.data/spec/std/isa/inst/V/vfncvt.f.xu.w.yaml +145 -0
  1227. data/.data/spec/std/isa/inst/V/vfncvt.rod.f.f.w.yaml +145 -0
  1228. data/.data/spec/std/isa/inst/V/vfncvt.rtz.x.f.w.yaml +145 -0
  1229. data/.data/spec/std/isa/inst/V/vfncvt.rtz.xu.f.w.yaml +145 -0
  1230. data/.data/spec/std/isa/inst/V/vfncvt.x.f.w.yaml +145 -0
  1231. data/.data/spec/std/isa/inst/V/vfncvt.xu.f.w.yaml +145 -0
  1232. data/.data/spec/std/isa/inst/V/vfnmacc.vf.yaml +80 -0
  1233. data/.data/spec/std/isa/inst/V/vfnmacc.vv.yaml +80 -0
  1234. data/.data/spec/std/isa/inst/V/vfnmadd.vf.yaml +80 -0
  1235. data/.data/spec/std/isa/inst/V/vfnmadd.vv.yaml +80 -0
  1236. data/.data/spec/std/isa/inst/V/vfnmsac.vf.yaml +80 -0
  1237. data/.data/spec/std/isa/inst/V/vfnmsac.vv.yaml +80 -0
  1238. data/.data/spec/std/isa/inst/V/vfnmsub.vf.yaml +80 -0
  1239. data/.data/spec/std/isa/inst/V/vfnmsub.vv.yaml +80 -0
  1240. data/.data/spec/std/isa/inst/V/vfrdiv.vf.yaml +92 -0
  1241. data/.data/spec/std/isa/inst/V/vfrec7.v.yaml +97 -0
  1242. data/.data/spec/std/isa/inst/V/vfredmax.vs.yaml +50 -0
  1243. data/.data/spec/std/isa/inst/V/vfredmin.vs.yaml +50 -0
  1244. data/.data/spec/std/isa/inst/V/vfredosum.vs.yaml +50 -0
  1245. data/.data/spec/std/isa/inst/V/vfredusum.vs.yaml +50 -0
  1246. data/.data/spec/std/isa/inst/V/vfrsqrt7.v.yaml +97 -0
  1247. data/.data/spec/std/isa/inst/V/vfrsub.vf.yaml +92 -0
  1248. data/.data/spec/std/isa/inst/V/vfsgnj.vf.yaml +92 -0
  1249. data/.data/spec/std/isa/inst/V/vfsgnj.vv.yaml +81 -0
  1250. data/.data/spec/std/isa/inst/V/vfsgnjn.vf.yaml +92 -0
  1251. data/.data/spec/std/isa/inst/V/vfsgnjn.vv.yaml +81 -0
  1252. data/.data/spec/std/isa/inst/V/vfsgnjx.vf.yaml +92 -0
  1253. data/.data/spec/std/isa/inst/V/vfsgnjx.vv.yaml +81 -0
  1254. data/.data/spec/std/isa/inst/V/vfslide1down.vf.yaml +92 -0
  1255. data/.data/spec/std/isa/inst/V/vfslide1up.vf.yaml +92 -0
  1256. data/.data/spec/std/isa/inst/V/vfsqrt.v.yaml +97 -0
  1257. data/.data/spec/std/isa/inst/V/vfsub.vf.yaml +92 -0
  1258. data/.data/spec/std/isa/inst/V/vfsub.vv.yaml +81 -0
  1259. data/.data/spec/std/isa/inst/V/vfwadd.vf.yaml +80 -0
  1260. data/.data/spec/std/isa/inst/V/vfwadd.vv.yaml +81 -0
  1261. data/.data/spec/std/isa/inst/V/vfwadd.wf.yaml +78 -0
  1262. data/.data/spec/std/isa/inst/V/vfwadd.wv.yaml +79 -0
  1263. data/.data/spec/std/isa/inst/V/vfwcvt.f.f.v.yaml +137 -0
  1264. data/.data/spec/std/isa/inst/V/vfwcvt.f.x.v.yaml +137 -0
  1265. data/.data/spec/std/isa/inst/V/vfwcvt.f.xu.v.yaml +137 -0
  1266. data/.data/spec/std/isa/inst/V/vfwcvt.rtz.x.f.v.yaml +137 -0
  1267. data/.data/spec/std/isa/inst/V/vfwcvt.rtz.xu.f.v.yaml +137 -0
  1268. data/.data/spec/std/isa/inst/V/vfwcvt.x.f.v.yaml +137 -0
  1269. data/.data/spec/std/isa/inst/V/vfwcvt.xu.f.v.yaml +137 -0
  1270. data/.data/spec/std/isa/inst/V/vfwmacc.vf.yaml +81 -0
  1271. data/.data/spec/std/isa/inst/V/vfwmacc.vv.yaml +82 -0
  1272. data/.data/spec/std/isa/inst/V/vfwmsac.vf.yaml +81 -0
  1273. data/.data/spec/std/isa/inst/V/vfwmsac.vv.yaml +82 -0
  1274. data/.data/spec/std/isa/inst/V/vfwmul.vf.yaml +80 -0
  1275. data/.data/spec/std/isa/inst/V/vfwmul.vv.yaml +81 -0
  1276. data/.data/spec/std/isa/inst/V/vfwnmacc.vf.yaml +81 -0
  1277. data/.data/spec/std/isa/inst/V/vfwnmacc.vv.yaml +82 -0
  1278. data/.data/spec/std/isa/inst/V/vfwnmsac.vf.yaml +81 -0
  1279. data/.data/spec/std/isa/inst/V/vfwnmsac.vv.yaml +82 -0
  1280. data/.data/spec/std/isa/inst/V/vfwredosum.vs.yaml +50 -0
  1281. data/.data/spec/std/isa/inst/V/vfwredusum.vs.yaml +50 -0
  1282. data/.data/spec/std/isa/inst/V/vfwsub.vf.yaml +80 -0
  1283. data/.data/spec/std/isa/inst/V/vfwsub.vv.yaml +81 -0
  1284. data/.data/spec/std/isa/inst/V/vfwsub.wf.yaml +78 -0
  1285. data/.data/spec/std/isa/inst/V/vfwsub.wv.yaml +79 -0
  1286. data/.data/spec/std/isa/inst/V/vid.v.yaml +61 -0
  1287. data/.data/spec/std/isa/inst/V/viota.m.yaml +69 -0
  1288. data/.data/spec/std/isa/inst/V/vl1re16.v.yaml +29 -0
  1289. data/.data/spec/std/isa/inst/V/vl1re32.v.yaml +29 -0
  1290. data/.data/spec/std/isa/inst/V/vl1re64.v.yaml +29 -0
  1291. data/.data/spec/std/isa/inst/V/vl1re8.v.yaml +29 -0
  1292. data/.data/spec/std/isa/inst/V/vl2re16.v.yaml +29 -0
  1293. data/.data/spec/std/isa/inst/V/vl2re32.v.yaml +29 -0
  1294. data/.data/spec/std/isa/inst/V/vl2re64.v.yaml +29 -0
  1295. data/.data/spec/std/isa/inst/V/vl2re8.v.yaml +29 -0
  1296. data/.data/spec/std/isa/inst/V/vl4re16.v.yaml +29 -0
  1297. data/.data/spec/std/isa/inst/V/vl4re32.v.yaml +29 -0
  1298. data/.data/spec/std/isa/inst/V/vl4re64.v.yaml +29 -0
  1299. data/.data/spec/std/isa/inst/V/vl4re8.v.yaml +29 -0
  1300. data/.data/spec/std/isa/inst/V/vl8re16.v.yaml +29 -0
  1301. data/.data/spec/std/isa/inst/V/vl8re32.v.yaml +29 -0
  1302. data/.data/spec/std/isa/inst/V/vl8re64.v.yaml +29 -0
  1303. data/.data/spec/std/isa/inst/V/vl8re8.v.yaml +29 -0
  1304. data/.data/spec/std/isa/inst/V/vle16.v.yaml +52 -0
  1305. data/.data/spec/std/isa/inst/V/vle16ff.v.yaml +52 -0
  1306. data/.data/spec/std/isa/inst/V/vle32.v.yaml +52 -0
  1307. data/.data/spec/std/isa/inst/V/vle32ff.v.yaml +52 -0
  1308. data/.data/spec/std/isa/inst/V/vle64.v.yaml +52 -0
  1309. data/.data/spec/std/isa/inst/V/vle64ff.v.yaml +52 -0
  1310. data/.data/spec/std/isa/inst/V/vle8.v.yaml +64 -0
  1311. data/.data/spec/std/isa/inst/V/vle8ff.v.yaml +52 -0
  1312. data/.data/spec/std/isa/inst/V/vlm.v.yaml +48 -0
  1313. data/.data/spec/std/isa/inst/V/vloxei16.v.yaml +54 -0
  1314. data/.data/spec/std/isa/inst/V/vloxei32.v.yaml +54 -0
  1315. data/.data/spec/std/isa/inst/V/vloxei64.v.yaml +54 -0
  1316. data/.data/spec/std/isa/inst/V/vloxei8.v.yaml +54 -0
  1317. data/.data/spec/std/isa/inst/V/vloxseg2ei16.v.yaml +33 -0
  1318. data/.data/spec/std/isa/inst/V/vloxseg2ei32.v.yaml +33 -0
  1319. data/.data/spec/std/isa/inst/V/vloxseg2ei64.v.yaml +33 -0
  1320. data/.data/spec/std/isa/inst/V/vloxseg2ei8.v.yaml +33 -0
  1321. data/.data/spec/std/isa/inst/V/vloxseg3ei16.v.yaml +33 -0
  1322. data/.data/spec/std/isa/inst/V/vloxseg3ei32.v.yaml +33 -0
  1323. data/.data/spec/std/isa/inst/V/vloxseg3ei64.v.yaml +33 -0
  1324. data/.data/spec/std/isa/inst/V/vloxseg3ei8.v.yaml +33 -0
  1325. data/.data/spec/std/isa/inst/V/vloxseg4ei16.v.yaml +33 -0
  1326. data/.data/spec/std/isa/inst/V/vloxseg4ei32.v.yaml +33 -0
  1327. data/.data/spec/std/isa/inst/V/vloxseg4ei64.v.yaml +33 -0
  1328. data/.data/spec/std/isa/inst/V/vloxseg4ei8.v.yaml +33 -0
  1329. data/.data/spec/std/isa/inst/V/vloxseg5ei16.v.yaml +33 -0
  1330. data/.data/spec/std/isa/inst/V/vloxseg5ei32.v.yaml +33 -0
  1331. data/.data/spec/std/isa/inst/V/vloxseg5ei64.v.yaml +33 -0
  1332. data/.data/spec/std/isa/inst/V/vloxseg5ei8.v.yaml +33 -0
  1333. data/.data/spec/std/isa/inst/V/vloxseg6ei16.v.yaml +33 -0
  1334. data/.data/spec/std/isa/inst/V/vloxseg6ei32.v.yaml +33 -0
  1335. data/.data/spec/std/isa/inst/V/vloxseg6ei64.v.yaml +33 -0
  1336. data/.data/spec/std/isa/inst/V/vloxseg6ei8.v.yaml +33 -0
  1337. data/.data/spec/std/isa/inst/V/vloxseg7ei16.v.yaml +33 -0
  1338. data/.data/spec/std/isa/inst/V/vloxseg7ei32.v.yaml +33 -0
  1339. data/.data/spec/std/isa/inst/V/vloxseg7ei64.v.yaml +33 -0
  1340. data/.data/spec/std/isa/inst/V/vloxseg7ei8.v.yaml +33 -0
  1341. data/.data/spec/std/isa/inst/V/vloxseg8ei16.v.yaml +33 -0
  1342. data/.data/spec/std/isa/inst/V/vloxseg8ei32.v.yaml +33 -0
  1343. data/.data/spec/std/isa/inst/V/vloxseg8ei64.v.yaml +33 -0
  1344. data/.data/spec/std/isa/inst/V/vloxseg8ei8.v.yaml +33 -0
  1345. data/.data/spec/std/isa/inst/V/vlse16.v.yaml +54 -0
  1346. data/.data/spec/std/isa/inst/V/vlse32.v.yaml +54 -0
  1347. data/.data/spec/std/isa/inst/V/vlse64.v.yaml +54 -0
  1348. data/.data/spec/std/isa/inst/V/vlse8.v.yaml +54 -0
  1349. data/.data/spec/std/isa/inst/V/vlseg2e16.v.yaml +31 -0
  1350. data/.data/spec/std/isa/inst/V/vlseg2e16ff.v.yaml +31 -0
  1351. data/.data/spec/std/isa/inst/V/vlseg2e32.v.yaml +31 -0
  1352. data/.data/spec/std/isa/inst/V/vlseg2e32ff.v.yaml +31 -0
  1353. data/.data/spec/std/isa/inst/V/vlseg2e64.v.yaml +31 -0
  1354. data/.data/spec/std/isa/inst/V/vlseg2e64ff.v.yaml +31 -0
  1355. data/.data/spec/std/isa/inst/V/vlseg2e8.v.yaml +31 -0
  1356. data/.data/spec/std/isa/inst/V/vlseg2e8ff.v.yaml +31 -0
  1357. data/.data/spec/std/isa/inst/V/vlseg3e16.v.yaml +31 -0
  1358. data/.data/spec/std/isa/inst/V/vlseg3e16ff.v.yaml +31 -0
  1359. data/.data/spec/std/isa/inst/V/vlseg3e32.v.yaml +31 -0
  1360. data/.data/spec/std/isa/inst/V/vlseg3e32ff.v.yaml +31 -0
  1361. data/.data/spec/std/isa/inst/V/vlseg3e64.v.yaml +31 -0
  1362. data/.data/spec/std/isa/inst/V/vlseg3e64ff.v.yaml +31 -0
  1363. data/.data/spec/std/isa/inst/V/vlseg3e8.v.yaml +31 -0
  1364. data/.data/spec/std/isa/inst/V/vlseg3e8ff.v.yaml +31 -0
  1365. data/.data/spec/std/isa/inst/V/vlseg4e16.v.yaml +31 -0
  1366. data/.data/spec/std/isa/inst/V/vlseg4e16ff.v.yaml +31 -0
  1367. data/.data/spec/std/isa/inst/V/vlseg4e32.v.yaml +31 -0
  1368. data/.data/spec/std/isa/inst/V/vlseg4e32ff.v.yaml +31 -0
  1369. data/.data/spec/std/isa/inst/V/vlseg4e64.v.yaml +31 -0
  1370. data/.data/spec/std/isa/inst/V/vlseg4e64ff.v.yaml +31 -0
  1371. data/.data/spec/std/isa/inst/V/vlseg4e8.v.yaml +31 -0
  1372. data/.data/spec/std/isa/inst/V/vlseg4e8ff.v.yaml +31 -0
  1373. data/.data/spec/std/isa/inst/V/vlseg5e16.v.yaml +31 -0
  1374. data/.data/spec/std/isa/inst/V/vlseg5e16ff.v.yaml +31 -0
  1375. data/.data/spec/std/isa/inst/V/vlseg5e32.v.yaml +31 -0
  1376. data/.data/spec/std/isa/inst/V/vlseg5e32ff.v.yaml +31 -0
  1377. data/.data/spec/std/isa/inst/V/vlseg5e64.v.yaml +31 -0
  1378. data/.data/spec/std/isa/inst/V/vlseg5e64ff.v.yaml +31 -0
  1379. data/.data/spec/std/isa/inst/V/vlseg5e8.v.yaml +31 -0
  1380. data/.data/spec/std/isa/inst/V/vlseg5e8ff.v.yaml +31 -0
  1381. data/.data/spec/std/isa/inst/V/vlseg6e16.v.yaml +31 -0
  1382. data/.data/spec/std/isa/inst/V/vlseg6e16ff.v.yaml +31 -0
  1383. data/.data/spec/std/isa/inst/V/vlseg6e32.v.yaml +31 -0
  1384. data/.data/spec/std/isa/inst/V/vlseg6e32ff.v.yaml +31 -0
  1385. data/.data/spec/std/isa/inst/V/vlseg6e64.v.yaml +31 -0
  1386. data/.data/spec/std/isa/inst/V/vlseg6e64ff.v.yaml +31 -0
  1387. data/.data/spec/std/isa/inst/V/vlseg6e8.v.yaml +31 -0
  1388. data/.data/spec/std/isa/inst/V/vlseg6e8ff.v.yaml +31 -0
  1389. data/.data/spec/std/isa/inst/V/vlseg7e16.v.yaml +31 -0
  1390. data/.data/spec/std/isa/inst/V/vlseg7e16ff.v.yaml +31 -0
  1391. data/.data/spec/std/isa/inst/V/vlseg7e32.v.yaml +31 -0
  1392. data/.data/spec/std/isa/inst/V/vlseg7e32ff.v.yaml +31 -0
  1393. data/.data/spec/std/isa/inst/V/vlseg7e64.v.yaml +31 -0
  1394. data/.data/spec/std/isa/inst/V/vlseg7e64ff.v.yaml +31 -0
  1395. data/.data/spec/std/isa/inst/V/vlseg7e8.v.yaml +31 -0
  1396. data/.data/spec/std/isa/inst/V/vlseg7e8ff.v.yaml +31 -0
  1397. data/.data/spec/std/isa/inst/V/vlseg8e16.v.yaml +31 -0
  1398. data/.data/spec/std/isa/inst/V/vlseg8e16ff.v.yaml +31 -0
  1399. data/.data/spec/std/isa/inst/V/vlseg8e32.v.yaml +31 -0
  1400. data/.data/spec/std/isa/inst/V/vlseg8e32ff.v.yaml +31 -0
  1401. data/.data/spec/std/isa/inst/V/vlseg8e64.v.yaml +31 -0
  1402. data/.data/spec/std/isa/inst/V/vlseg8e64ff.v.yaml +31 -0
  1403. data/.data/spec/std/isa/inst/V/vlseg8e8.v.yaml +31 -0
  1404. data/.data/spec/std/isa/inst/V/vlseg8e8ff.v.yaml +31 -0
  1405. data/.data/spec/std/isa/inst/V/vlsseg2e16.v.yaml +33 -0
  1406. data/.data/spec/std/isa/inst/V/vlsseg2e32.v.yaml +33 -0
  1407. data/.data/spec/std/isa/inst/V/vlsseg2e64.v.yaml +33 -0
  1408. data/.data/spec/std/isa/inst/V/vlsseg2e8.v.yaml +33 -0
  1409. data/.data/spec/std/isa/inst/V/vlsseg3e16.v.yaml +33 -0
  1410. data/.data/spec/std/isa/inst/V/vlsseg3e32.v.yaml +33 -0
  1411. data/.data/spec/std/isa/inst/V/vlsseg3e64.v.yaml +33 -0
  1412. data/.data/spec/std/isa/inst/V/vlsseg3e8.v.yaml +33 -0
  1413. data/.data/spec/std/isa/inst/V/vlsseg4e16.v.yaml +33 -0
  1414. data/.data/spec/std/isa/inst/V/vlsseg4e32.v.yaml +33 -0
  1415. data/.data/spec/std/isa/inst/V/vlsseg4e64.v.yaml +33 -0
  1416. data/.data/spec/std/isa/inst/V/vlsseg4e8.v.yaml +33 -0
  1417. data/.data/spec/std/isa/inst/V/vlsseg5e16.v.yaml +33 -0
  1418. data/.data/spec/std/isa/inst/V/vlsseg5e32.v.yaml +33 -0
  1419. data/.data/spec/std/isa/inst/V/vlsseg5e64.v.yaml +33 -0
  1420. data/.data/spec/std/isa/inst/V/vlsseg5e8.v.yaml +33 -0
  1421. data/.data/spec/std/isa/inst/V/vlsseg6e16.v.yaml +33 -0
  1422. data/.data/spec/std/isa/inst/V/vlsseg6e32.v.yaml +33 -0
  1423. data/.data/spec/std/isa/inst/V/vlsseg6e64.v.yaml +33 -0
  1424. data/.data/spec/std/isa/inst/V/vlsseg6e8.v.yaml +33 -0
  1425. data/.data/spec/std/isa/inst/V/vlsseg7e16.v.yaml +33 -0
  1426. data/.data/spec/std/isa/inst/V/vlsseg7e32.v.yaml +33 -0
  1427. data/.data/spec/std/isa/inst/V/vlsseg7e64.v.yaml +33 -0
  1428. data/.data/spec/std/isa/inst/V/vlsseg7e8.v.yaml +33 -0
  1429. data/.data/spec/std/isa/inst/V/vlsseg8e16.v.yaml +33 -0
  1430. data/.data/spec/std/isa/inst/V/vlsseg8e32.v.yaml +33 -0
  1431. data/.data/spec/std/isa/inst/V/vlsseg8e64.v.yaml +33 -0
  1432. data/.data/spec/std/isa/inst/V/vlsseg8e8.v.yaml +33 -0
  1433. data/.data/spec/std/isa/inst/V/vluxei16.v.yaml +54 -0
  1434. data/.data/spec/std/isa/inst/V/vluxei32.v.yaml +54 -0
  1435. data/.data/spec/std/isa/inst/V/vluxei64.v.yaml +54 -0
  1436. data/.data/spec/std/isa/inst/V/vluxei8.v.yaml +54 -0
  1437. data/.data/spec/std/isa/inst/V/vluxseg2ei16.v.yaml +33 -0
  1438. data/.data/spec/std/isa/inst/V/vluxseg2ei32.v.yaml +33 -0
  1439. data/.data/spec/std/isa/inst/V/vluxseg2ei64.v.yaml +33 -0
  1440. data/.data/spec/std/isa/inst/V/vluxseg2ei8.v.yaml +33 -0
  1441. data/.data/spec/std/isa/inst/V/vluxseg3ei16.v.yaml +33 -0
  1442. data/.data/spec/std/isa/inst/V/vluxseg3ei32.v.yaml +33 -0
  1443. data/.data/spec/std/isa/inst/V/vluxseg3ei64.v.yaml +33 -0
  1444. data/.data/spec/std/isa/inst/V/vluxseg3ei8.v.yaml +33 -0
  1445. data/.data/spec/std/isa/inst/V/vluxseg4ei16.v.yaml +33 -0
  1446. data/.data/spec/std/isa/inst/V/vluxseg4ei32.v.yaml +33 -0
  1447. data/.data/spec/std/isa/inst/V/vluxseg4ei64.v.yaml +33 -0
  1448. data/.data/spec/std/isa/inst/V/vluxseg4ei8.v.yaml +33 -0
  1449. data/.data/spec/std/isa/inst/V/vluxseg5ei16.v.yaml +33 -0
  1450. data/.data/spec/std/isa/inst/V/vluxseg5ei32.v.yaml +33 -0
  1451. data/.data/spec/std/isa/inst/V/vluxseg5ei64.v.yaml +33 -0
  1452. data/.data/spec/std/isa/inst/V/vluxseg5ei8.v.yaml +33 -0
  1453. data/.data/spec/std/isa/inst/V/vluxseg6ei16.v.yaml +33 -0
  1454. data/.data/spec/std/isa/inst/V/vluxseg6ei32.v.yaml +33 -0
  1455. data/.data/spec/std/isa/inst/V/vluxseg6ei64.v.yaml +33 -0
  1456. data/.data/spec/std/isa/inst/V/vluxseg6ei8.v.yaml +33 -0
  1457. data/.data/spec/std/isa/inst/V/vluxseg7ei16.v.yaml +33 -0
  1458. data/.data/spec/std/isa/inst/V/vluxseg7ei32.v.yaml +33 -0
  1459. data/.data/spec/std/isa/inst/V/vluxseg7ei64.v.yaml +33 -0
  1460. data/.data/spec/std/isa/inst/V/vluxseg7ei8.v.yaml +33 -0
  1461. data/.data/spec/std/isa/inst/V/vluxseg8ei16.v.yaml +33 -0
  1462. data/.data/spec/std/isa/inst/V/vluxseg8ei32.v.yaml +33 -0
  1463. data/.data/spec/std/isa/inst/V/vluxseg8ei64.v.yaml +33 -0
  1464. data/.data/spec/std/isa/inst/V/vluxseg8ei8.v.yaml +33 -0
  1465. data/.data/spec/std/isa/inst/V/vmacc.vv.yaml +74 -0
  1466. data/.data/spec/std/isa/inst/V/vmacc.vx.yaml +74 -0
  1467. data/.data/spec/std/isa/inst/V/vmadc.vi.yaml +69 -0
  1468. data/.data/spec/std/isa/inst/V/vmadc.vim.yaml +70 -0
  1469. data/.data/spec/std/isa/inst/V/vmadc.vv.yaml +70 -0
  1470. data/.data/spec/std/isa/inst/V/vmadc.vvm.yaml +71 -0
  1471. data/.data/spec/std/isa/inst/V/vmadc.vx.yaml +70 -0
  1472. data/.data/spec/std/isa/inst/V/vmadc.vxm.yaml +71 -0
  1473. data/.data/spec/std/isa/inst/V/vmadd.vv.yaml +74 -0
  1474. data/.data/spec/std/isa/inst/V/vmadd.vx.yaml +74 -0
  1475. data/.data/spec/std/isa/inst/V/vmand.mm.yaml +75 -0
  1476. data/.data/spec/std/isa/inst/V/vmandn.mm.yaml +31 -0
  1477. data/.data/spec/std/isa/inst/V/vmax.vv.yaml +134 -0
  1478. data/.data/spec/std/isa/inst/V/vmax.vx.yaml +117 -0
  1479. data/.data/spec/std/isa/inst/V/vmaxu.vv.yaml +134 -0
  1480. data/.data/spec/std/isa/inst/V/vmaxu.vx.yaml +117 -0
  1481. data/.data/spec/std/isa/inst/V/vmerge.vim.yaml +76 -0
  1482. data/.data/spec/std/isa/inst/V/vmerge.vvm.yaml +76 -0
  1483. data/.data/spec/std/isa/inst/V/vmerge.vxm.yaml +76 -0
  1484. data/.data/spec/std/isa/inst/V/vmfeq.vf.yaml +79 -0
  1485. data/.data/spec/std/isa/inst/V/vmfeq.vv.yaml +77 -0
  1486. data/.data/spec/std/isa/inst/V/vmfge.vf.yaml +79 -0
  1487. data/.data/spec/std/isa/inst/V/vmfgt.vf.yaml +79 -0
  1488. data/.data/spec/std/isa/inst/V/vmfle.vf.yaml +79 -0
  1489. data/.data/spec/std/isa/inst/V/vmfle.vv.yaml +77 -0
  1490. data/.data/spec/std/isa/inst/V/vmflt.vf.yaml +79 -0
  1491. data/.data/spec/std/isa/inst/V/vmflt.vv.yaml +77 -0
  1492. data/.data/spec/std/isa/inst/V/vmfne.vf.yaml +79 -0
  1493. data/.data/spec/std/isa/inst/V/vmfne.vv.yaml +77 -0
  1494. data/.data/spec/std/isa/inst/V/vmin.vv.yaml +134 -0
  1495. data/.data/spec/std/isa/inst/V/vmin.vx.yaml +117 -0
  1496. data/.data/spec/std/isa/inst/V/vminu.vv.yaml +134 -0
  1497. data/.data/spec/std/isa/inst/V/vminu.vx.yaml +117 -0
  1498. data/.data/spec/std/isa/inst/V/vmnand.mm.yaml +75 -0
  1499. data/.data/spec/std/isa/inst/V/vmnor.mm.yaml +75 -0
  1500. data/.data/spec/std/isa/inst/V/vmor.mm.yaml +75 -0
  1501. data/.data/spec/std/isa/inst/V/vmorn.mm.yaml +31 -0
  1502. data/.data/spec/std/isa/inst/V/vmsbc.vv.yaml +70 -0
  1503. data/.data/spec/std/isa/inst/V/vmsbc.vvm.yaml +71 -0
  1504. data/.data/spec/std/isa/inst/V/vmsbc.vx.yaml +70 -0
  1505. data/.data/spec/std/isa/inst/V/vmsbc.vxm.yaml +71 -0
  1506. data/.data/spec/std/isa/inst/V/vmsbf.m.yaml +69 -0
  1507. data/.data/spec/std/isa/inst/V/vmseq.vi.yaml +77 -0
  1508. data/.data/spec/std/isa/inst/V/vmseq.vv.yaml +77 -0
  1509. data/.data/spec/std/isa/inst/V/vmseq.vx.yaml +79 -0
  1510. data/.data/spec/std/isa/inst/V/vmsgt.vi.yaml +77 -0
  1511. data/.data/spec/std/isa/inst/V/vmsgt.vx.yaml +79 -0
  1512. data/.data/spec/std/isa/inst/V/vmsgtu.vi.yaml +77 -0
  1513. data/.data/spec/std/isa/inst/V/vmsgtu.vx.yaml +79 -0
  1514. data/.data/spec/std/isa/inst/V/vmsif.m.yaml +69 -0
  1515. data/.data/spec/std/isa/inst/V/vmsle.vi.yaml +77 -0
  1516. data/.data/spec/std/isa/inst/V/vmsle.vv.yaml +77 -0
  1517. data/.data/spec/std/isa/inst/V/vmsle.vx.yaml +79 -0
  1518. data/.data/spec/std/isa/inst/V/vmsleu.vi.yaml +77 -0
  1519. data/.data/spec/std/isa/inst/V/vmsleu.vv.yaml +77 -0
  1520. data/.data/spec/std/isa/inst/V/vmsleu.vx.yaml +79 -0
  1521. data/.data/spec/std/isa/inst/V/vmslt.vv.yaml +77 -0
  1522. data/.data/spec/std/isa/inst/V/vmslt.vx.yaml +79 -0
  1523. data/.data/spec/std/isa/inst/V/vmsltu.vv.yaml +77 -0
  1524. data/.data/spec/std/isa/inst/V/vmsltu.vx.yaml +79 -0
  1525. data/.data/spec/std/isa/inst/V/vmsne.vi.yaml +77 -0
  1526. data/.data/spec/std/isa/inst/V/vmsne.vv.yaml +77 -0
  1527. data/.data/spec/std/isa/inst/V/vmsne.vx.yaml +79 -0
  1528. data/.data/spec/std/isa/inst/V/vmsof.m.yaml +73 -0
  1529. data/.data/spec/std/isa/inst/V/vmul.vv.yaml +116 -0
  1530. data/.data/spec/std/isa/inst/V/vmul.vx.yaml +125 -0
  1531. data/.data/spec/std/isa/inst/V/vmulh.vv.yaml +116 -0
  1532. data/.data/spec/std/isa/inst/V/vmulh.vx.yaml +125 -0
  1533. data/.data/spec/std/isa/inst/V/vmulhsu.vv.yaml +116 -0
  1534. data/.data/spec/std/isa/inst/V/vmulhsu.vx.yaml +125 -0
  1535. data/.data/spec/std/isa/inst/V/vmulhu.vv.yaml +116 -0
  1536. data/.data/spec/std/isa/inst/V/vmulhu.vx.yaml +125 -0
  1537. data/.data/spec/std/isa/inst/V/vmv.s.x.yaml +70 -0
  1538. data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +105 -0
  1539. data/.data/spec/std/isa/inst/V/vmv.v.v.yaml +62 -0
  1540. data/.data/spec/std/isa/inst/V/vmv.v.x.yaml +62 -0
  1541. data/.data/spec/std/isa/inst/V/vmv.x.s.yaml +64 -0
  1542. data/.data/spec/std/isa/inst/V/vmv1r.v.yaml +62 -0
  1543. data/.data/spec/std/isa/inst/V/vmv2r.v.yaml +62 -0
  1544. data/.data/spec/std/isa/inst/V/vmv4r.v.yaml +62 -0
  1545. data/.data/spec/std/isa/inst/V/vmv8r.v.yaml +62 -0
  1546. data/.data/spec/std/isa/inst/V/vmxnor.mm.yaml +75 -0
  1547. data/.data/spec/std/isa/inst/V/vmxor.mm.yaml +75 -0
  1548. data/.data/spec/std/isa/inst/V/vnclip.wi.yaml +87 -0
  1549. data/.data/spec/std/isa/inst/V/vnclip.wv.yaml +87 -0
  1550. data/.data/spec/std/isa/inst/V/vnclip.wx.yaml +87 -0
  1551. data/.data/spec/std/isa/inst/V/vnclipu.wi.yaml +87 -0
  1552. data/.data/spec/std/isa/inst/V/vnclipu.wv.yaml +87 -0
  1553. data/.data/spec/std/isa/inst/V/vnclipu.wx.yaml +87 -0
  1554. data/.data/spec/std/isa/inst/V/vnmsac.vv.yaml +74 -0
  1555. data/.data/spec/std/isa/inst/V/vnmsac.vx.yaml +74 -0
  1556. data/.data/spec/std/isa/inst/V/vnmsub.vv.yaml +74 -0
  1557. data/.data/spec/std/isa/inst/V/vnmsub.vx.yaml +74 -0
  1558. data/.data/spec/std/isa/inst/V/vnsra.wi.yaml +86 -0
  1559. data/.data/spec/std/isa/inst/V/vnsra.wv.yaml +86 -0
  1560. data/.data/spec/std/isa/inst/V/vnsra.wx.yaml +86 -0
  1561. data/.data/spec/std/isa/inst/V/vnsrl.wi.yaml +86 -0
  1562. data/.data/spec/std/isa/inst/V/vnsrl.wv.yaml +86 -0
  1563. data/.data/spec/std/isa/inst/V/vnsrl.wx.yaml +86 -0
  1564. data/.data/spec/std/isa/inst/V/vor.vi.yaml +101 -0
  1565. data/.data/spec/std/isa/inst/V/vor.vv.yaml +134 -0
  1566. data/.data/spec/std/isa/inst/V/vor.vx.yaml +117 -0
  1567. data/.data/spec/std/isa/inst/V/vredand.vs.yaml +81 -0
  1568. data/.data/spec/std/isa/inst/V/vredmax.vs.yaml +81 -0
  1569. data/.data/spec/std/isa/inst/V/vredmaxu.vs.yaml +81 -0
  1570. data/.data/spec/std/isa/inst/V/vredmin.vs.yaml +81 -0
  1571. data/.data/spec/std/isa/inst/V/vredminu.vs.yaml +81 -0
  1572. data/.data/spec/std/isa/inst/V/vredor.vs.yaml +81 -0
  1573. data/.data/spec/std/isa/inst/V/vredsum.vs.yaml +81 -0
  1574. data/.data/spec/std/isa/inst/V/vredxor.vs.yaml +81 -0
  1575. data/.data/spec/std/isa/inst/V/vrem.vv.yaml +116 -0
  1576. data/.data/spec/std/isa/inst/V/vrem.vx.yaml +125 -0
  1577. data/.data/spec/std/isa/inst/V/vremu.vv.yaml +116 -0
  1578. data/.data/spec/std/isa/inst/V/vremu.vx.yaml +125 -0
  1579. data/.data/spec/std/isa/inst/V/vrgather.vi.yaml +87 -0
  1580. data/.data/spec/std/isa/inst/V/vrgather.vv.yaml +134 -0
  1581. data/.data/spec/std/isa/inst/V/vrgather.vx.yaml +87 -0
  1582. data/.data/spec/std/isa/inst/V/vrgatherei16.vv.yaml +134 -0
  1583. data/.data/spec/std/isa/inst/V/vrsub.vi.yaml +101 -0
  1584. data/.data/spec/std/isa/inst/V/vrsub.vx.yaml +117 -0
  1585. data/.data/spec/std/isa/inst/V/vs1r.v.yaml +29 -0
  1586. data/.data/spec/std/isa/inst/V/vs2r.v.yaml +29 -0
  1587. data/.data/spec/std/isa/inst/V/vs4r.v.yaml +29 -0
  1588. data/.data/spec/std/isa/inst/V/vs8r.v.yaml +29 -0
  1589. data/.data/spec/std/isa/inst/V/vsadd.vi.yaml +101 -0
  1590. data/.data/spec/std/isa/inst/V/vsadd.vv.yaml +134 -0
  1591. data/.data/spec/std/isa/inst/V/vsadd.vx.yaml +117 -0
  1592. data/.data/spec/std/isa/inst/V/vsaddu.vi.yaml +101 -0
  1593. data/.data/spec/std/isa/inst/V/vsaddu.vv.yaml +134 -0
  1594. data/.data/spec/std/isa/inst/V/vsaddu.vx.yaml +117 -0
  1595. data/.data/spec/std/isa/inst/V/vsbc.vvm.yaml +76 -0
  1596. data/.data/spec/std/isa/inst/V/vsbc.vxm.yaml +76 -0
  1597. data/.data/spec/std/isa/inst/V/vse16.v.yaml +52 -0
  1598. data/.data/spec/std/isa/inst/V/vse32.v.yaml +52 -0
  1599. data/.data/spec/std/isa/inst/V/vse64.v.yaml +52 -0
  1600. data/.data/spec/std/isa/inst/V/vse8.v.yaml +60 -0
  1601. data/.data/spec/std/isa/inst/V/vsetivli.yaml +122 -0
  1602. data/.data/spec/std/isa/inst/V/vsetvl.yaml +147 -0
  1603. data/.data/spec/std/isa/inst/V/vsetvli.yaml +174 -0
  1604. data/.data/spec/std/isa/inst/V/vsext.vf2.yaml +75 -0
  1605. data/.data/spec/std/isa/inst/V/vsext.vf4.yaml +75 -0
  1606. data/.data/spec/std/isa/inst/V/vsext.vf8.yaml +75 -0
  1607. data/.data/spec/std/isa/inst/V/vslide1down.vx.yaml +125 -0
  1608. data/.data/spec/std/isa/inst/V/vslide1up.vx.yaml +125 -0
  1609. data/.data/spec/std/isa/inst/V/vslidedown.vi.yaml +87 -0
  1610. data/.data/spec/std/isa/inst/V/vslidedown.vx.yaml +87 -0
  1611. data/.data/spec/std/isa/inst/V/vslideup.vi.yaml +87 -0
  1612. data/.data/spec/std/isa/inst/V/vslideup.vx.yaml +87 -0
  1613. data/.data/spec/std/isa/inst/V/vsll.vi.yaml +101 -0
  1614. data/.data/spec/std/isa/inst/V/vsll.vv.yaml +134 -0
  1615. data/.data/spec/std/isa/inst/V/vsll.vx.yaml +117 -0
  1616. data/.data/spec/std/isa/inst/V/vsm.v.yaml +48 -0
  1617. data/.data/spec/std/isa/inst/V/vsmul.vv.yaml +134 -0
  1618. data/.data/spec/std/isa/inst/V/vsmul.vx.yaml +117 -0
  1619. data/.data/spec/std/isa/inst/V/vsoxei16.v.yaml +54 -0
  1620. data/.data/spec/std/isa/inst/V/vsoxei32.v.yaml +54 -0
  1621. data/.data/spec/std/isa/inst/V/vsoxei64.v.yaml +54 -0
  1622. data/.data/spec/std/isa/inst/V/vsoxei8.v.yaml +54 -0
  1623. data/.data/spec/std/isa/inst/V/vsoxseg2ei16.v.yaml +33 -0
  1624. data/.data/spec/std/isa/inst/V/vsoxseg2ei32.v.yaml +33 -0
  1625. data/.data/spec/std/isa/inst/V/vsoxseg2ei64.v.yaml +33 -0
  1626. data/.data/spec/std/isa/inst/V/vsoxseg2ei8.v.yaml +33 -0
  1627. data/.data/spec/std/isa/inst/V/vsoxseg3ei16.v.yaml +33 -0
  1628. data/.data/spec/std/isa/inst/V/vsoxseg3ei32.v.yaml +33 -0
  1629. data/.data/spec/std/isa/inst/V/vsoxseg3ei64.v.yaml +33 -0
  1630. data/.data/spec/std/isa/inst/V/vsoxseg3ei8.v.yaml +33 -0
  1631. data/.data/spec/std/isa/inst/V/vsoxseg4ei16.v.yaml +33 -0
  1632. data/.data/spec/std/isa/inst/V/vsoxseg4ei32.v.yaml +33 -0
  1633. data/.data/spec/std/isa/inst/V/vsoxseg4ei64.v.yaml +33 -0
  1634. data/.data/spec/std/isa/inst/V/vsoxseg4ei8.v.yaml +33 -0
  1635. data/.data/spec/std/isa/inst/V/vsoxseg5ei16.v.yaml +33 -0
  1636. data/.data/spec/std/isa/inst/V/vsoxseg5ei32.v.yaml +33 -0
  1637. data/.data/spec/std/isa/inst/V/vsoxseg5ei64.v.yaml +33 -0
  1638. data/.data/spec/std/isa/inst/V/vsoxseg5ei8.v.yaml +33 -0
  1639. data/.data/spec/std/isa/inst/V/vsoxseg6ei16.v.yaml +33 -0
  1640. data/.data/spec/std/isa/inst/V/vsoxseg6ei32.v.yaml +33 -0
  1641. data/.data/spec/std/isa/inst/V/vsoxseg6ei64.v.yaml +33 -0
  1642. data/.data/spec/std/isa/inst/V/vsoxseg6ei8.v.yaml +33 -0
  1643. data/.data/spec/std/isa/inst/V/vsoxseg7ei16.v.yaml +33 -0
  1644. data/.data/spec/std/isa/inst/V/vsoxseg7ei32.v.yaml +33 -0
  1645. data/.data/spec/std/isa/inst/V/vsoxseg7ei64.v.yaml +33 -0
  1646. data/.data/spec/std/isa/inst/V/vsoxseg7ei8.v.yaml +33 -0
  1647. data/.data/spec/std/isa/inst/V/vsoxseg8ei16.v.yaml +33 -0
  1648. data/.data/spec/std/isa/inst/V/vsoxseg8ei32.v.yaml +33 -0
  1649. data/.data/spec/std/isa/inst/V/vsoxseg8ei64.v.yaml +33 -0
  1650. data/.data/spec/std/isa/inst/V/vsoxseg8ei8.v.yaml +33 -0
  1651. data/.data/spec/std/isa/inst/V/vsra.vi.yaml +101 -0
  1652. data/.data/spec/std/isa/inst/V/vsra.vv.yaml +134 -0
  1653. data/.data/spec/std/isa/inst/V/vsra.vx.yaml +117 -0
  1654. data/.data/spec/std/isa/inst/V/vsrl.vi.yaml +101 -0
  1655. data/.data/spec/std/isa/inst/V/vsrl.vv.yaml +134 -0
  1656. data/.data/spec/std/isa/inst/V/vsrl.vx.yaml +117 -0
  1657. data/.data/spec/std/isa/inst/V/vsse16.v.yaml +54 -0
  1658. data/.data/spec/std/isa/inst/V/vsse32.v.yaml +54 -0
  1659. data/.data/spec/std/isa/inst/V/vsse64.v.yaml +54 -0
  1660. data/.data/spec/std/isa/inst/V/vsse8.v.yaml +54 -0
  1661. data/.data/spec/std/isa/inst/V/vsseg2e16.v.yaml +31 -0
  1662. data/.data/spec/std/isa/inst/V/vsseg2e32.v.yaml +31 -0
  1663. data/.data/spec/std/isa/inst/V/vsseg2e64.v.yaml +31 -0
  1664. data/.data/spec/std/isa/inst/V/vsseg2e8.v.yaml +31 -0
  1665. data/.data/spec/std/isa/inst/V/vsseg3e16.v.yaml +31 -0
  1666. data/.data/spec/std/isa/inst/V/vsseg3e32.v.yaml +31 -0
  1667. data/.data/spec/std/isa/inst/V/vsseg3e64.v.yaml +31 -0
  1668. data/.data/spec/std/isa/inst/V/vsseg3e8.v.yaml +31 -0
  1669. data/.data/spec/std/isa/inst/V/vsseg4e16.v.yaml +31 -0
  1670. data/.data/spec/std/isa/inst/V/vsseg4e32.v.yaml +31 -0
  1671. data/.data/spec/std/isa/inst/V/vsseg4e64.v.yaml +31 -0
  1672. data/.data/spec/std/isa/inst/V/vsseg4e8.v.yaml +31 -0
  1673. data/.data/spec/std/isa/inst/V/vsseg5e16.v.yaml +31 -0
  1674. data/.data/spec/std/isa/inst/V/vsseg5e32.v.yaml +31 -0
  1675. data/.data/spec/std/isa/inst/V/vsseg5e64.v.yaml +31 -0
  1676. data/.data/spec/std/isa/inst/V/vsseg5e8.v.yaml +31 -0
  1677. data/.data/spec/std/isa/inst/V/vsseg6e16.v.yaml +31 -0
  1678. data/.data/spec/std/isa/inst/V/vsseg6e32.v.yaml +31 -0
  1679. data/.data/spec/std/isa/inst/V/vsseg6e64.v.yaml +31 -0
  1680. data/.data/spec/std/isa/inst/V/vsseg6e8.v.yaml +31 -0
  1681. data/.data/spec/std/isa/inst/V/vsseg7e16.v.yaml +31 -0
  1682. data/.data/spec/std/isa/inst/V/vsseg7e32.v.yaml +31 -0
  1683. data/.data/spec/std/isa/inst/V/vsseg7e64.v.yaml +31 -0
  1684. data/.data/spec/std/isa/inst/V/vsseg7e8.v.yaml +31 -0
  1685. data/.data/spec/std/isa/inst/V/vsseg8e16.v.yaml +31 -0
  1686. data/.data/spec/std/isa/inst/V/vsseg8e32.v.yaml +31 -0
  1687. data/.data/spec/std/isa/inst/V/vsseg8e64.v.yaml +31 -0
  1688. data/.data/spec/std/isa/inst/V/vsseg8e8.v.yaml +31 -0
  1689. data/.data/spec/std/isa/inst/V/vssra.vi.yaml +101 -0
  1690. data/.data/spec/std/isa/inst/V/vssra.vv.yaml +134 -0
  1691. data/.data/spec/std/isa/inst/V/vssra.vx.yaml +117 -0
  1692. data/.data/spec/std/isa/inst/V/vssrl.vi.yaml +101 -0
  1693. data/.data/spec/std/isa/inst/V/vssrl.vv.yaml +134 -0
  1694. data/.data/spec/std/isa/inst/V/vssrl.vx.yaml +117 -0
  1695. data/.data/spec/std/isa/inst/V/vssseg2e16.v.yaml +33 -0
  1696. data/.data/spec/std/isa/inst/V/vssseg2e32.v.yaml +33 -0
  1697. data/.data/spec/std/isa/inst/V/vssseg2e64.v.yaml +33 -0
  1698. data/.data/spec/std/isa/inst/V/vssseg2e8.v.yaml +33 -0
  1699. data/.data/spec/std/isa/inst/V/vssseg3e16.v.yaml +33 -0
  1700. data/.data/spec/std/isa/inst/V/vssseg3e32.v.yaml +33 -0
  1701. data/.data/spec/std/isa/inst/V/vssseg3e64.v.yaml +33 -0
  1702. data/.data/spec/std/isa/inst/V/vssseg3e8.v.yaml +33 -0
  1703. data/.data/spec/std/isa/inst/V/vssseg4e16.v.yaml +33 -0
  1704. data/.data/spec/std/isa/inst/V/vssseg4e32.v.yaml +33 -0
  1705. data/.data/spec/std/isa/inst/V/vssseg4e64.v.yaml +33 -0
  1706. data/.data/spec/std/isa/inst/V/vssseg4e8.v.yaml +33 -0
  1707. data/.data/spec/std/isa/inst/V/vssseg5e16.v.yaml +33 -0
  1708. data/.data/spec/std/isa/inst/V/vssseg5e32.v.yaml +33 -0
  1709. data/.data/spec/std/isa/inst/V/vssseg5e64.v.yaml +33 -0
  1710. data/.data/spec/std/isa/inst/V/vssseg5e8.v.yaml +33 -0
  1711. data/.data/spec/std/isa/inst/V/vssseg6e16.v.yaml +33 -0
  1712. data/.data/spec/std/isa/inst/V/vssseg6e32.v.yaml +33 -0
  1713. data/.data/spec/std/isa/inst/V/vssseg6e64.v.yaml +33 -0
  1714. data/.data/spec/std/isa/inst/V/vssseg6e8.v.yaml +33 -0
  1715. data/.data/spec/std/isa/inst/V/vssseg7e16.v.yaml +33 -0
  1716. data/.data/spec/std/isa/inst/V/vssseg7e32.v.yaml +33 -0
  1717. data/.data/spec/std/isa/inst/V/vssseg7e64.v.yaml +33 -0
  1718. data/.data/spec/std/isa/inst/V/vssseg7e8.v.yaml +33 -0
  1719. data/.data/spec/std/isa/inst/V/vssseg8e16.v.yaml +33 -0
  1720. data/.data/spec/std/isa/inst/V/vssseg8e32.v.yaml +33 -0
  1721. data/.data/spec/std/isa/inst/V/vssseg8e64.v.yaml +33 -0
  1722. data/.data/spec/std/isa/inst/V/vssseg8e8.v.yaml +33 -0
  1723. data/.data/spec/std/isa/inst/V/vssub.vv.yaml +134 -0
  1724. data/.data/spec/std/isa/inst/V/vssub.vx.yaml +117 -0
  1725. data/.data/spec/std/isa/inst/V/vssubu.vv.yaml +134 -0
  1726. data/.data/spec/std/isa/inst/V/vssubu.vx.yaml +117 -0
  1727. data/.data/spec/std/isa/inst/V/vsub.vv.yaml +134 -0
  1728. data/.data/spec/std/isa/inst/V/vsub.vx.yaml +117 -0
  1729. data/.data/spec/std/isa/inst/V/vsuxei16.v.yaml +54 -0
  1730. data/.data/spec/std/isa/inst/V/vsuxei32.v.yaml +54 -0
  1731. data/.data/spec/std/isa/inst/V/vsuxei64.v.yaml +54 -0
  1732. data/.data/spec/std/isa/inst/V/vsuxei8.v.yaml +54 -0
  1733. data/.data/spec/std/isa/inst/V/vsuxseg2ei16.v.yaml +33 -0
  1734. data/.data/spec/std/isa/inst/V/vsuxseg2ei32.v.yaml +33 -0
  1735. data/.data/spec/std/isa/inst/V/vsuxseg2ei64.v.yaml +33 -0
  1736. data/.data/spec/std/isa/inst/V/vsuxseg2ei8.v.yaml +33 -0
  1737. data/.data/spec/std/isa/inst/V/vsuxseg3ei16.v.yaml +33 -0
  1738. data/.data/spec/std/isa/inst/V/vsuxseg3ei32.v.yaml +33 -0
  1739. data/.data/spec/std/isa/inst/V/vsuxseg3ei64.v.yaml +33 -0
  1740. data/.data/spec/std/isa/inst/V/vsuxseg3ei8.v.yaml +33 -0
  1741. data/.data/spec/std/isa/inst/V/vsuxseg4ei16.v.yaml +33 -0
  1742. data/.data/spec/std/isa/inst/V/vsuxseg4ei32.v.yaml +33 -0
  1743. data/.data/spec/std/isa/inst/V/vsuxseg4ei64.v.yaml +33 -0
  1744. data/.data/spec/std/isa/inst/V/vsuxseg4ei8.v.yaml +33 -0
  1745. data/.data/spec/std/isa/inst/V/vsuxseg5ei16.v.yaml +33 -0
  1746. data/.data/spec/std/isa/inst/V/vsuxseg5ei32.v.yaml +33 -0
  1747. data/.data/spec/std/isa/inst/V/vsuxseg5ei64.v.yaml +33 -0
  1748. data/.data/spec/std/isa/inst/V/vsuxseg5ei8.v.yaml +33 -0
  1749. data/.data/spec/std/isa/inst/V/vsuxseg6ei16.v.yaml +33 -0
  1750. data/.data/spec/std/isa/inst/V/vsuxseg6ei32.v.yaml +33 -0
  1751. data/.data/spec/std/isa/inst/V/vsuxseg6ei64.v.yaml +33 -0
  1752. data/.data/spec/std/isa/inst/V/vsuxseg6ei8.v.yaml +33 -0
  1753. data/.data/spec/std/isa/inst/V/vsuxseg7ei16.v.yaml +33 -0
  1754. data/.data/spec/std/isa/inst/V/vsuxseg7ei32.v.yaml +33 -0
  1755. data/.data/spec/std/isa/inst/V/vsuxseg7ei64.v.yaml +33 -0
  1756. data/.data/spec/std/isa/inst/V/vsuxseg7ei8.v.yaml +33 -0
  1757. data/.data/spec/std/isa/inst/V/vsuxseg8ei16.v.yaml +33 -0
  1758. data/.data/spec/std/isa/inst/V/vsuxseg8ei32.v.yaml +33 -0
  1759. data/.data/spec/std/isa/inst/V/vsuxseg8ei64.v.yaml +33 -0
  1760. data/.data/spec/std/isa/inst/V/vsuxseg8ei8.v.yaml +33 -0
  1761. data/.data/spec/std/isa/inst/V/vwadd.vv.yaml +83 -0
  1762. data/.data/spec/std/isa/inst/V/vwadd.vx.yaml +82 -0
  1763. data/.data/spec/std/isa/inst/V/vwadd.wv.yaml +79 -0
  1764. data/.data/spec/std/isa/inst/V/vwadd.wx.yaml +78 -0
  1765. data/.data/spec/std/isa/inst/V/vwaddu.vv.yaml +83 -0
  1766. data/.data/spec/std/isa/inst/V/vwaddu.vx.yaml +82 -0
  1767. data/.data/spec/std/isa/inst/V/vwaddu.wv.yaml +79 -0
  1768. data/.data/spec/std/isa/inst/V/vwaddu.wx.yaml +78 -0
  1769. data/.data/spec/std/isa/inst/V/vwmacc.vv.yaml +79 -0
  1770. data/.data/spec/std/isa/inst/V/vwmacc.vx.yaml +79 -0
  1771. data/.data/spec/std/isa/inst/V/vwmaccsu.vv.yaml +79 -0
  1772. data/.data/spec/std/isa/inst/V/vwmaccsu.vx.yaml +79 -0
  1773. data/.data/spec/std/isa/inst/V/vwmaccu.vv.yaml +79 -0
  1774. data/.data/spec/std/isa/inst/V/vwmaccu.vx.yaml +79 -0
  1775. data/.data/spec/std/isa/inst/V/vwmaccus.vx.yaml +79 -0
  1776. data/.data/spec/std/isa/inst/V/vwmul.vv.yaml +83 -0
  1777. data/.data/spec/std/isa/inst/V/vwmul.vx.yaml +82 -0
  1778. data/.data/spec/std/isa/inst/V/vwmulsu.vv.yaml +83 -0
  1779. data/.data/spec/std/isa/inst/V/vwmulsu.vx.yaml +82 -0
  1780. data/.data/spec/std/isa/inst/V/vwmulu.vv.yaml +83 -0
  1781. data/.data/spec/std/isa/inst/V/vwmulu.vx.yaml +82 -0
  1782. data/.data/spec/std/isa/inst/V/vwredsum.vs.yaml +79 -0
  1783. data/.data/spec/std/isa/inst/V/vwredsumu.vs.yaml +79 -0
  1784. data/.data/spec/std/isa/inst/V/vwsub.vv.yaml +83 -0
  1785. data/.data/spec/std/isa/inst/V/vwsub.vx.yaml +82 -0
  1786. data/.data/spec/std/isa/inst/V/vwsub.wv.yaml +79 -0
  1787. data/.data/spec/std/isa/inst/V/vwsub.wx.yaml +78 -0
  1788. data/.data/spec/std/isa/inst/V/vwsubu.vv.yaml +83 -0
  1789. data/.data/spec/std/isa/inst/V/vwsubu.vx.yaml +82 -0
  1790. data/.data/spec/std/isa/inst/V/vwsubu.wv.yaml +79 -0
  1791. data/.data/spec/std/isa/inst/V/vwsubu.wx.yaml +78 -0
  1792. data/.data/spec/std/isa/inst/V/vxor.vi.yaml +101 -0
  1793. data/.data/spec/std/isa/inst/V/vxor.vv.yaml +134 -0
  1794. data/.data/spec/std/isa/inst/V/vxor.vx.yaml +117 -0
  1795. data/.data/spec/std/isa/inst/V/vzext.vf2.yaml +75 -0
  1796. data/.data/spec/std/isa/inst/V/vzext.vf4.yaml +75 -0
  1797. data/.data/spec/std/isa/inst/V/vzext.vf8.yaml +75 -0
  1798. data/.data/spec/std/isa/inst/Zaamo/amoadd.SIZE.AQRL.layout +181 -0
  1799. data/.data/spec/std/isa/inst/Zaamo/amoadd.d.aq.yaml +145 -0
  1800. data/.data/spec/std/isa/inst/Zaamo/amoadd.d.aqrl.yaml +147 -0
  1801. data/.data/spec/std/isa/inst/Zaamo/amoadd.d.rl.yaml +145 -0
  1802. data/.data/spec/std/isa/inst/Zaamo/amoadd.d.yaml +143 -0
  1803. data/.data/spec/std/isa/inst/Zaamo/amoadd.w.aq.yaml +143 -0
  1804. data/.data/spec/std/isa/inst/Zaamo/amoadd.w.aqrl.yaml +145 -0
  1805. data/.data/spec/std/isa/inst/Zaamo/amoadd.w.rl.yaml +143 -0
  1806. data/.data/spec/std/isa/inst/Zaamo/amoadd.w.yaml +141 -0
  1807. data/.data/spec/std/isa/inst/Zaamo/amoand.SIZE.AQRL.layout +181 -0
  1808. data/.data/spec/std/isa/inst/Zaamo/amoand.d.aq.yaml +145 -0
  1809. data/.data/spec/std/isa/inst/Zaamo/amoand.d.aqrl.yaml +147 -0
  1810. data/.data/spec/std/isa/inst/Zaamo/amoand.d.rl.yaml +145 -0
  1811. data/.data/spec/std/isa/inst/Zaamo/amoand.d.yaml +143 -0
  1812. data/.data/spec/std/isa/inst/Zaamo/amoand.w.aq.yaml +143 -0
  1813. data/.data/spec/std/isa/inst/Zaamo/amoand.w.aqrl.yaml +145 -0
  1814. data/.data/spec/std/isa/inst/Zaamo/amoand.w.rl.yaml +143 -0
  1815. data/.data/spec/std/isa/inst/Zaamo/amoand.w.yaml +141 -0
  1816. data/.data/spec/std/isa/inst/Zaamo/amomax.SIZE.AQRL.layout +181 -0
  1817. data/.data/spec/std/isa/inst/Zaamo/amomax.d.aq.yaml +145 -0
  1818. data/.data/spec/std/isa/inst/Zaamo/amomax.d.aqrl.yaml +147 -0
  1819. data/.data/spec/std/isa/inst/Zaamo/amomax.d.rl.yaml +145 -0
  1820. data/.data/spec/std/isa/inst/Zaamo/amomax.d.yaml +143 -0
  1821. data/.data/spec/std/isa/inst/Zaamo/amomax.w.aq.yaml +143 -0
  1822. data/.data/spec/std/isa/inst/Zaamo/amomax.w.aqrl.yaml +145 -0
  1823. data/.data/spec/std/isa/inst/Zaamo/amomax.w.rl.yaml +143 -0
  1824. data/.data/spec/std/isa/inst/Zaamo/amomax.w.yaml +141 -0
  1825. data/.data/spec/std/isa/inst/Zaamo/amomaxu.SIZE.AQRL.layout +181 -0
  1826. data/.data/spec/std/isa/inst/Zaamo/amomaxu.d.aq.yaml +145 -0
  1827. data/.data/spec/std/isa/inst/Zaamo/amomaxu.d.aqrl.yaml +147 -0
  1828. data/.data/spec/std/isa/inst/Zaamo/amomaxu.d.rl.yaml +145 -0
  1829. data/.data/spec/std/isa/inst/Zaamo/amomaxu.d.yaml +143 -0
  1830. data/.data/spec/std/isa/inst/Zaamo/amomaxu.w.aq.yaml +143 -0
  1831. data/.data/spec/std/isa/inst/Zaamo/amomaxu.w.aqrl.yaml +145 -0
  1832. data/.data/spec/std/isa/inst/Zaamo/amomaxu.w.rl.yaml +143 -0
  1833. data/.data/spec/std/isa/inst/Zaamo/amomaxu.w.yaml +141 -0
  1834. data/.data/spec/std/isa/inst/Zaamo/amomin.SIZE.AQRL.layout +181 -0
  1835. data/.data/spec/std/isa/inst/Zaamo/amomin.d.aq.yaml +145 -0
  1836. data/.data/spec/std/isa/inst/Zaamo/amomin.d.aqrl.yaml +147 -0
  1837. data/.data/spec/std/isa/inst/Zaamo/amomin.d.rl.yaml +145 -0
  1838. data/.data/spec/std/isa/inst/Zaamo/amomin.d.yaml +143 -0
  1839. data/.data/spec/std/isa/inst/Zaamo/amomin.w.aq.yaml +143 -0
  1840. data/.data/spec/std/isa/inst/Zaamo/amomin.w.aqrl.yaml +145 -0
  1841. data/.data/spec/std/isa/inst/Zaamo/amomin.w.rl.yaml +143 -0
  1842. data/.data/spec/std/isa/inst/Zaamo/amomin.w.yaml +141 -0
  1843. data/.data/spec/std/isa/inst/Zaamo/amominu.SIZE.AQRL.layout +181 -0
  1844. data/.data/spec/std/isa/inst/Zaamo/amominu.d.aq.yaml +145 -0
  1845. data/.data/spec/std/isa/inst/Zaamo/amominu.d.aqrl.yaml +147 -0
  1846. data/.data/spec/std/isa/inst/Zaamo/amominu.d.rl.yaml +145 -0
  1847. data/.data/spec/std/isa/inst/Zaamo/amominu.d.yaml +143 -0
  1848. data/.data/spec/std/isa/inst/Zaamo/amominu.w.aq.yaml +143 -0
  1849. data/.data/spec/std/isa/inst/Zaamo/amominu.w.aqrl.yaml +145 -0
  1850. data/.data/spec/std/isa/inst/Zaamo/amominu.w.rl.yaml +143 -0
  1851. data/.data/spec/std/isa/inst/Zaamo/amominu.w.yaml +141 -0
  1852. data/.data/spec/std/isa/inst/Zaamo/amoor.SIZE.AQRL.layout +181 -0
  1853. data/.data/spec/std/isa/inst/Zaamo/amoor.d.aq.yaml +145 -0
  1854. data/.data/spec/std/isa/inst/Zaamo/amoor.d.aqrl.yaml +147 -0
  1855. data/.data/spec/std/isa/inst/Zaamo/amoor.d.rl.yaml +145 -0
  1856. data/.data/spec/std/isa/inst/Zaamo/amoor.d.yaml +143 -0
  1857. data/.data/spec/std/isa/inst/Zaamo/amoor.w.aq.yaml +143 -0
  1858. data/.data/spec/std/isa/inst/Zaamo/amoor.w.aqrl.yaml +145 -0
  1859. data/.data/spec/std/isa/inst/Zaamo/amoor.w.rl.yaml +143 -0
  1860. data/.data/spec/std/isa/inst/Zaamo/amoor.w.yaml +141 -0
  1861. data/.data/spec/std/isa/inst/Zaamo/amoswap.SIZE.AQRL.layout +180 -0
  1862. data/.data/spec/std/isa/inst/Zaamo/amoswap.d.aq.yaml +144 -0
  1863. data/.data/spec/std/isa/inst/Zaamo/amoswap.d.aqrl.yaml +146 -0
  1864. data/.data/spec/std/isa/inst/Zaamo/amoswap.d.rl.yaml +144 -0
  1865. data/.data/spec/std/isa/inst/Zaamo/amoswap.d.yaml +142 -0
  1866. data/.data/spec/std/isa/inst/Zaamo/amoswap.w.aq.yaml +142 -0
  1867. data/.data/spec/std/isa/inst/Zaamo/amoswap.w.aqrl.yaml +144 -0
  1868. data/.data/spec/std/isa/inst/Zaamo/amoswap.w.rl.yaml +142 -0
  1869. data/.data/spec/std/isa/inst/Zaamo/amoswap.w.yaml +140 -0
  1870. data/.data/spec/std/isa/inst/Zaamo/amoxor.SIZE.AQRL.layout +181 -0
  1871. data/.data/spec/std/isa/inst/Zaamo/amoxor.d.aq.yaml +145 -0
  1872. data/.data/spec/std/isa/inst/Zaamo/amoxor.d.aqrl.yaml +147 -0
  1873. data/.data/spec/std/isa/inst/Zaamo/amoxor.d.rl.yaml +145 -0
  1874. data/.data/spec/std/isa/inst/Zaamo/amoxor.d.yaml +143 -0
  1875. data/.data/spec/std/isa/inst/Zaamo/amoxor.w.aq.yaml +143 -0
  1876. data/.data/spec/std/isa/inst/Zaamo/amoxor.w.aqrl.yaml +145 -0
  1877. data/.data/spec/std/isa/inst/Zaamo/amoxor.w.rl.yaml +143 -0
  1878. data/.data/spec/std/isa/inst/Zaamo/amoxor.w.yaml +141 -0
  1879. data/.data/spec/std/isa/inst/Zabha/amoadd.b.aq.yaml +143 -0
  1880. data/.data/spec/std/isa/inst/Zabha/amoadd.b.aqrl.yaml +145 -0
  1881. data/.data/spec/std/isa/inst/Zabha/amoadd.b.rl.yaml +143 -0
  1882. data/.data/spec/std/isa/inst/Zabha/amoadd.b.yaml +141 -0
  1883. data/.data/spec/std/isa/inst/Zabha/amoadd.h.aq.yaml +143 -0
  1884. data/.data/spec/std/isa/inst/Zabha/amoadd.h.aqrl.yaml +145 -0
  1885. data/.data/spec/std/isa/inst/Zabha/amoadd.h.rl.yaml +143 -0
  1886. data/.data/spec/std/isa/inst/Zabha/amoadd.h.yaml +141 -0
  1887. data/.data/spec/std/isa/inst/Zabha/amoand.b.aq.yaml +143 -0
  1888. data/.data/spec/std/isa/inst/Zabha/amoand.b.aqrl.yaml +145 -0
  1889. data/.data/spec/std/isa/inst/Zabha/amoand.b.rl.yaml +143 -0
  1890. data/.data/spec/std/isa/inst/Zabha/amoand.b.yaml +141 -0
  1891. data/.data/spec/std/isa/inst/Zabha/amoand.h.aq.yaml +143 -0
  1892. data/.data/spec/std/isa/inst/Zabha/amoand.h.aqrl.yaml +145 -0
  1893. data/.data/spec/std/isa/inst/Zabha/amoand.h.rl.yaml +143 -0
  1894. data/.data/spec/std/isa/inst/Zabha/amoand.h.yaml +141 -0
  1895. data/.data/spec/std/isa/inst/Zabha/amocas.b.aq.yaml +135 -0
  1896. data/.data/spec/std/isa/inst/Zabha/amocas.b.aqrl.yaml +137 -0
  1897. data/.data/spec/std/isa/inst/Zabha/amocas.b.rl.yaml +135 -0
  1898. data/.data/spec/std/isa/inst/Zabha/amocas.b.yaml +133 -0
  1899. data/.data/spec/std/isa/inst/Zabha/amocas.h.aq.yaml +135 -0
  1900. data/.data/spec/std/isa/inst/Zabha/amocas.h.aqrl.yaml +137 -0
  1901. data/.data/spec/std/isa/inst/Zabha/amocas.h.rl.yaml +135 -0
  1902. data/.data/spec/std/isa/inst/Zabha/amocas.h.yaml +133 -0
  1903. data/.data/spec/std/isa/inst/Zabha/amomax.b.aq.yaml +143 -0
  1904. data/.data/spec/std/isa/inst/Zabha/amomax.b.aqrl.yaml +145 -0
  1905. data/.data/spec/std/isa/inst/Zabha/amomax.b.rl.yaml +143 -0
  1906. data/.data/spec/std/isa/inst/Zabha/amomax.b.yaml +141 -0
  1907. data/.data/spec/std/isa/inst/Zabha/amomax.h.aq.yaml +143 -0
  1908. data/.data/spec/std/isa/inst/Zabha/amomax.h.aqrl.yaml +145 -0
  1909. data/.data/spec/std/isa/inst/Zabha/amomax.h.rl.yaml +143 -0
  1910. data/.data/spec/std/isa/inst/Zabha/amomax.h.yaml +141 -0
  1911. data/.data/spec/std/isa/inst/Zabha/amomaxu.b.aq.yaml +143 -0
  1912. data/.data/spec/std/isa/inst/Zabha/amomaxu.b.aqrl.yaml +145 -0
  1913. data/.data/spec/std/isa/inst/Zabha/amomaxu.b.rl.yaml +143 -0
  1914. data/.data/spec/std/isa/inst/Zabha/amomaxu.b.yaml +141 -0
  1915. data/.data/spec/std/isa/inst/Zabha/amomaxu.h.aq.yaml +143 -0
  1916. data/.data/spec/std/isa/inst/Zabha/amomaxu.h.aqrl.yaml +145 -0
  1917. data/.data/spec/std/isa/inst/Zabha/amomaxu.h.rl.yaml +143 -0
  1918. data/.data/spec/std/isa/inst/Zabha/amomaxu.h.yaml +141 -0
  1919. data/.data/spec/std/isa/inst/Zabha/amomin.b.aq.yaml +143 -0
  1920. data/.data/spec/std/isa/inst/Zabha/amomin.b.aqrl.yaml +145 -0
  1921. data/.data/spec/std/isa/inst/Zabha/amomin.b.rl.yaml +143 -0
  1922. data/.data/spec/std/isa/inst/Zabha/amomin.b.yaml +141 -0
  1923. data/.data/spec/std/isa/inst/Zabha/amomin.h.aq.yaml +143 -0
  1924. data/.data/spec/std/isa/inst/Zabha/amomin.h.aqrl.yaml +145 -0
  1925. data/.data/spec/std/isa/inst/Zabha/amomin.h.rl.yaml +143 -0
  1926. data/.data/spec/std/isa/inst/Zabha/amomin.h.yaml +141 -0
  1927. data/.data/spec/std/isa/inst/Zabha/amominu.b.aq.yaml +143 -0
  1928. data/.data/spec/std/isa/inst/Zabha/amominu.b.aqrl.yaml +145 -0
  1929. data/.data/spec/std/isa/inst/Zabha/amominu.b.rl.yaml +143 -0
  1930. data/.data/spec/std/isa/inst/Zabha/amominu.b.yaml +141 -0
  1931. data/.data/spec/std/isa/inst/Zabha/amominu.h.aq.yaml +143 -0
  1932. data/.data/spec/std/isa/inst/Zabha/amominu.h.aqrl.yaml +145 -0
  1933. data/.data/spec/std/isa/inst/Zabha/amominu.h.rl.yaml +143 -0
  1934. data/.data/spec/std/isa/inst/Zabha/amominu.h.yaml +141 -0
  1935. data/.data/spec/std/isa/inst/Zabha/amoor.b.aq.yaml +143 -0
  1936. data/.data/spec/std/isa/inst/Zabha/amoor.b.aqrl.yaml +145 -0
  1937. data/.data/spec/std/isa/inst/Zabha/amoor.b.rl.yaml +143 -0
  1938. data/.data/spec/std/isa/inst/Zabha/amoor.b.yaml +141 -0
  1939. data/.data/spec/std/isa/inst/Zabha/amoor.h.aq.yaml +143 -0
  1940. data/.data/spec/std/isa/inst/Zabha/amoor.h.aqrl.yaml +145 -0
  1941. data/.data/spec/std/isa/inst/Zabha/amoor.h.rl.yaml +143 -0
  1942. data/.data/spec/std/isa/inst/Zabha/amoor.h.yaml +141 -0
  1943. data/.data/spec/std/isa/inst/Zabha/amoswap.b.aq.yaml +142 -0
  1944. data/.data/spec/std/isa/inst/Zabha/amoswap.b.aqrl.yaml +144 -0
  1945. data/.data/spec/std/isa/inst/Zabha/amoswap.b.rl.yaml +142 -0
  1946. data/.data/spec/std/isa/inst/Zabha/amoswap.b.yaml +140 -0
  1947. data/.data/spec/std/isa/inst/Zabha/amoswap.h.aq.yaml +142 -0
  1948. data/.data/spec/std/isa/inst/Zabha/amoswap.h.aqrl.yaml +144 -0
  1949. data/.data/spec/std/isa/inst/Zabha/amoswap.h.rl.yaml +142 -0
  1950. data/.data/spec/std/isa/inst/Zabha/amoswap.h.yaml +140 -0
  1951. data/.data/spec/std/isa/inst/Zabha/amoxor.b.aq.yaml +143 -0
  1952. data/.data/spec/std/isa/inst/Zabha/amoxor.b.aqrl.yaml +145 -0
  1953. data/.data/spec/std/isa/inst/Zabha/amoxor.b.rl.yaml +143 -0
  1954. data/.data/spec/std/isa/inst/Zabha/amoxor.b.yaml +141 -0
  1955. data/.data/spec/std/isa/inst/Zabha/amoxor.h.aq.yaml +143 -0
  1956. data/.data/spec/std/isa/inst/Zabha/amoxor.h.aqrl.yaml +145 -0
  1957. data/.data/spec/std/isa/inst/Zabha/amoxor.h.rl.yaml +143 -0
  1958. data/.data/spec/std/isa/inst/Zabha/amoxor.h.yaml +141 -0
  1959. data/.data/spec/std/isa/inst/Zacas/amocas.SIZE.AQRL.layout +174 -0
  1960. data/.data/spec/std/isa/inst/Zacas/amocas.d.aq.yaml +135 -0
  1961. data/.data/spec/std/isa/inst/Zacas/amocas.d.aqrl.yaml +137 -0
  1962. data/.data/spec/std/isa/inst/Zacas/amocas.d.rl.yaml +135 -0
  1963. data/.data/spec/std/isa/inst/Zacas/amocas.d.yaml +133 -0
  1964. data/.data/spec/std/isa/inst/Zacas/amocas.q.aq.yaml +137 -0
  1965. data/.data/spec/std/isa/inst/Zacas/amocas.q.aqrl.yaml +139 -0
  1966. data/.data/spec/std/isa/inst/Zacas/amocas.q.rl.yaml +137 -0
  1967. data/.data/spec/std/isa/inst/Zacas/amocas.q.yaml +135 -0
  1968. data/.data/spec/std/isa/inst/Zacas/amocas.w.aq.yaml +135 -0
  1969. data/.data/spec/std/isa/inst/Zacas/amocas.w.aqrl.yaml +137 -0
  1970. data/.data/spec/std/isa/inst/Zacas/amocas.w.rl.yaml +135 -0
  1971. data/.data/spec/std/isa/inst/Zacas/amocas.w.yaml +133 -0
  1972. data/.data/spec/std/isa/inst/Zalasr/lSIZE.AQRL.layout +80 -0
  1973. data/.data/spec/std/isa/inst/Zalasr/lb.aq.yaml +65 -0
  1974. data/.data/spec/std/isa/inst/Zalasr/lb.aqrl.yaml +65 -0
  1975. data/.data/spec/std/isa/inst/Zalasr/ld.aq.yaml +65 -0
  1976. data/.data/spec/std/isa/inst/Zalasr/ld.aqrl.yaml +65 -0
  1977. data/.data/spec/std/isa/inst/Zalasr/lh.aq.yaml +65 -0
  1978. data/.data/spec/std/isa/inst/Zalasr/lh.aqrl.yaml +65 -0
  1979. data/.data/spec/std/isa/inst/Zalasr/lw.aq.yaml +65 -0
  1980. data/.data/spec/std/isa/inst/Zalasr/lw.aqrl.yaml +65 -0
  1981. data/.data/spec/std/isa/inst/Zalasr/sSIZE.AQRL.layout +95 -0
  1982. data/.data/spec/std/isa/inst/Zalasr/sb.aqrl.yaml +80 -0
  1983. data/.data/spec/std/isa/inst/Zalasr/sb.rl.yaml +80 -0
  1984. data/.data/spec/std/isa/inst/Zalasr/sd.aqrl.yaml +80 -0
  1985. data/.data/spec/std/isa/inst/Zalasr/sd.rl.yaml +80 -0
  1986. data/.data/spec/std/isa/inst/Zalasr/sh.aqrl.yaml +80 -0
  1987. data/.data/spec/std/isa/inst/Zalasr/sh.rl.yaml +80 -0
  1988. data/.data/spec/std/isa/inst/Zalasr/sw.aqrl.yaml +80 -0
  1989. data/.data/spec/std/isa/inst/Zalasr/sw.rl.yaml +80 -0
  1990. data/.data/spec/std/isa/inst/Zalrsc/lr.SIZE.AQRL.layout +205 -0
  1991. data/.data/spec/std/isa/inst/Zalrsc/lr.d.aq.yaml +151 -0
  1992. data/.data/spec/std/isa/inst/Zalrsc/lr.d.aqrl.yaml +151 -0
  1993. data/.data/spec/std/isa/inst/Zalrsc/lr.d.rl.yaml +151 -0
  1994. data/.data/spec/std/isa/inst/Zalrsc/lr.d.yaml +151 -0
  1995. data/.data/spec/std/isa/inst/Zalrsc/lr.w.aq.yaml +158 -0
  1996. data/.data/spec/std/isa/inst/Zalrsc/lr.w.aqrl.yaml +158 -0
  1997. data/.data/spec/std/isa/inst/Zalrsc/lr.w.rl.yaml +158 -0
  1998. data/.data/spec/std/isa/inst/Zalrsc/lr.w.yaml +158 -0
  1999. data/.data/spec/std/isa/inst/Zalrsc/sc.SIZE.AQRL.layout +288 -0
  2000. data/.data/spec/std/isa/inst/Zalrsc/sc.d.aq.yaml +245 -0
  2001. data/.data/spec/std/isa/inst/Zalrsc/sc.d.aqrl.yaml +245 -0
  2002. data/.data/spec/std/isa/inst/Zalrsc/sc.d.rl.yaml +245 -0
  2003. data/.data/spec/std/isa/inst/Zalrsc/sc.d.yaml +245 -0
  2004. data/.data/spec/std/isa/inst/Zalrsc/sc.w.aq.yaml +247 -0
  2005. data/.data/spec/std/isa/inst/Zalrsc/sc.w.aqrl.yaml +247 -0
  2006. data/.data/spec/std/isa/inst/Zalrsc/sc.w.rl.yaml +247 -0
  2007. data/.data/spec/std/isa/inst/Zalrsc/sc.w.yaml +247 -0
  2008. data/.data/spec/std/isa/inst/Zawrs/wrs.nto.yaml +77 -0
  2009. data/.data/spec/std/isa/inst/Zawrs/wrs.sto.yaml +57 -0
  2010. data/.data/spec/std/isa/inst/Zba/add.uw.yaml +63 -0
  2011. data/.data/spec/std/isa/inst/Zba/sh1add.uw.yaml +59 -0
  2012. data/.data/spec/std/isa/inst/Zba/sh1add.yaml +54 -0
  2013. data/.data/spec/std/isa/inst/Zba/sh2add.uw.yaml +59 -0
  2014. data/.data/spec/std/isa/inst/Zba/sh2add.yaml +54 -0
  2015. data/.data/spec/std/isa/inst/Zba/sh3add.uw.yaml +59 -0
  2016. data/.data/spec/std/isa/inst/Zba/sh3add.yaml +54 -0
  2017. data/.data/spec/std/isa/inst/Zba/slli.uw.yaml +54 -0
  2018. data/.data/spec/std/isa/inst/Zbb/clz.yaml +54 -0
  2019. data/.data/spec/std/isa/inst/Zbb/clzw.yaml +55 -0
  2020. data/.data/spec/std/isa/inst/Zbb/cpop.yaml +69 -0
  2021. data/.data/spec/std/isa/inst/Zbb/cpopw.yaml +71 -0
  2022. data/.data/spec/std/isa/inst/Zbb/ctz.yaml +59 -0
  2023. data/.data/spec/std/isa/inst/Zbb/ctzw.yaml +57 -0
  2024. data/.data/spec/std/isa/inst/Zbb/max.yaml +71 -0
  2025. data/.data/spec/std/isa/inst/Zbb/maxu.yaml +63 -0
  2026. data/.data/spec/std/isa/inst/Zbb/min.yaml +63 -0
  2027. data/.data/spec/std/isa/inst/Zbb/minu.yaml +63 -0
  2028. data/.data/spec/std/isa/inst/Zbb/orc.b.yaml +59 -0
  2029. data/.data/spec/std/isa/inst/Zbb/sext.b.yaml +55 -0
  2030. data/.data/spec/std/isa/inst/Zbb/sext.h.yaml +55 -0
  2031. data/.data/spec/std/isa/inst/Zbb/zext.h.yaml +69 -0
  2032. data/.data/spec/std/isa/inst/Zbc/clmulr.yaml +61 -0
  2033. data/.data/spec/std/isa/inst/Zbkb/brev8.yaml +51 -0
  2034. data/.data/spec/std/isa/inst/Zbkb/pack.yaml +34 -0
  2035. data/.data/spec/std/isa/inst/Zbkb/packh.yaml +31 -0
  2036. data/.data/spec/std/isa/inst/Zbkb/packw.yaml +36 -0
  2037. data/.data/spec/std/isa/inst/Zbkb/unzip.yaml +53 -0
  2038. data/.data/spec/std/isa/inst/Zbkb/zip.yaml +53 -0
  2039. data/.data/spec/std/isa/inst/Zbkx/xperm4.yaml +64 -0
  2040. data/.data/spec/std/isa/inst/Zbkx/xperm8.yaml +64 -0
  2041. data/.data/spec/std/isa/inst/Zbs/bclr.yaml +59 -0
  2042. data/.data/spec/std/isa/inst/Zbs/bclri.yaml +69 -0
  2043. data/.data/spec/std/isa/inst/Zbs/bext.yaml +59 -0
  2044. data/.data/spec/std/isa/inst/Zbs/bexti.yaml +69 -0
  2045. data/.data/spec/std/isa/inst/Zbs/binv.yaml +59 -0
  2046. data/.data/spec/std/isa/inst/Zbs/binvi.yaml +69 -0
  2047. data/.data/spec/std/isa/inst/Zbs/bset.yaml +59 -0
  2048. data/.data/spec/std/isa/inst/Zbs/bseti.yaml +69 -0
  2049. data/.data/spec/std/isa/inst/Zcb/c.lbu.yaml +72 -0
  2050. data/.data/spec/std/isa/inst/Zcb/c.lh.yaml +73 -0
  2051. data/.data/spec/std/isa/inst/Zcb/c.lhu.yaml +73 -0
  2052. data/.data/spec/std/isa/inst/Zcb/c.mul.yaml +53 -0
  2053. data/.data/spec/std/isa/inst/Zcb/c.not.yaml +45 -0
  2054. data/.data/spec/std/isa/inst/Zcb/c.sb.yaml +39 -0
  2055. data/.data/spec/std/isa/inst/Zcb/c.sext.b.yaml +60 -0
  2056. data/.data/spec/std/isa/inst/Zcb/c.sext.h.yaml +60 -0
  2057. data/.data/spec/std/isa/inst/Zcb/c.sh.yaml +40 -0
  2058. data/.data/spec/std/isa/inst/Zcb/c.zext.b.yaml +60 -0
  2059. data/.data/spec/std/isa/inst/Zcb/c.zext.h.yaml +60 -0
  2060. data/.data/spec/std/isa/inst/Zcb/c.zext.w.yaml +61 -0
  2061. data/.data/spec/std/isa/inst/Zcd/c.fld.yaml +41 -0
  2062. data/.data/spec/std/isa/inst/Zcd/c.fldsp.yaml +42 -0
  2063. data/.data/spec/std/isa/inst/Zcd/c.fsd.yaml +41 -0
  2064. data/.data/spec/std/isa/inst/Zcd/c.fsdsp.yaml +42 -0
  2065. data/.data/spec/std/isa/inst/Zcf/c.flw.yaml +41 -0
  2066. data/.data/spec/std/isa/inst/Zcf/c.flwsp.yaml +42 -0
  2067. data/.data/spec/std/isa/inst/Zcf/c.fsw.yaml +41 -0
  2068. data/.data/spec/std/isa/inst/Zcf/c.fswsp.yaml +42 -0
  2069. data/.data/spec/std/isa/inst/Zcmop/c.mop.1.yaml +31 -0
  2070. data/.data/spec/std/isa/inst/Zcmop/c.mop.11.yaml +31 -0
  2071. data/.data/spec/std/isa/inst/Zcmop/c.mop.13.yaml +31 -0
  2072. data/.data/spec/std/isa/inst/Zcmop/c.mop.15.yaml +31 -0
  2073. data/.data/spec/std/isa/inst/Zcmop/c.mop.3.yaml +31 -0
  2074. data/.data/spec/std/isa/inst/Zcmop/c.mop.5.yaml +31 -0
  2075. data/.data/spec/std/isa/inst/Zcmop/c.mop.7.yaml +31 -0
  2076. data/.data/spec/std/isa/inst/Zcmop/c.mop.9.yaml +31 -0
  2077. data/.data/spec/std/isa/inst/Zcmop/c.mop.N.layout +45 -0
  2078. data/.data/spec/std/isa/inst/Zcmp/cm.mva01s.yaml +36 -0
  2079. data/.data/spec/std/isa/inst/Zcmp/cm.mvsa01.yaml +38 -0
  2080. data/.data/spec/std/isa/inst/Zcmp/cm.pop.yaml +86 -0
  2081. data/.data/spec/std/isa/inst/Zcmp/cm.popret.yaml +87 -0
  2082. data/.data/spec/std/isa/inst/Zcmp/cm.popretz.yaml +88 -0
  2083. data/.data/spec/std/isa/inst/Zcmp/cm.push.yaml +87 -0
  2084. data/.data/spec/std/isa/inst/Zcmt/cm.jalt.yaml +65 -0
  2085. data/.data/spec/std/isa/inst/Zcmt/cm.jt.yaml +60 -0
  2086. data/.data/spec/std/isa/inst/Zfa/fli.s.yaml +74 -0
  2087. data/.data/spec/std/isa/inst/Zfa/fmaxm.s.yaml +55 -0
  2088. data/.data/spec/std/isa/inst/Zfa/fminm.s.yaml +55 -0
  2089. data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +63 -0
  2090. data/.data/spec/std/isa/inst/Zfa/froundnx.s.yaml +53 -0
  2091. data/.data/spec/std/isa/inst/Zfbfmin/fcvt.bf16.s.yaml +31 -0
  2092. data/.data/spec/std/isa/inst/Zfbfmin/fcvt.s.bf16.yaml +31 -0
  2093. data/.data/spec/std/isa/inst/Zfh/fadd.h.yaml +35 -0
  2094. data/.data/spec/std/isa/inst/Zfh/fclass.h.yaml +31 -0
  2095. data/.data/spec/std/isa/inst/Zfh/fcvt.d.h.yaml +37 -0
  2096. data/.data/spec/std/isa/inst/Zfh/fcvt.h.d.yaml +37 -0
  2097. data/.data/spec/std/isa/inst/Zfh/fcvt.h.l.yaml +35 -0
  2098. data/.data/spec/std/isa/inst/Zfh/fcvt.h.lu.yaml +35 -0
  2099. data/.data/spec/std/isa/inst/Zfh/fcvt.h.s.yaml +94 -0
  2100. data/.data/spec/std/isa/inst/Zfh/fcvt.h.w.yaml +33 -0
  2101. data/.data/spec/std/isa/inst/Zfh/fcvt.h.wu.yaml +33 -0
  2102. data/.data/spec/std/isa/inst/Zfh/fcvt.l.h.yaml +35 -0
  2103. data/.data/spec/std/isa/inst/Zfh/fcvt.lu.h.yaml +35 -0
  2104. data/.data/spec/std/isa/inst/Zfh/fcvt.s.h.yaml +91 -0
  2105. data/.data/spec/std/isa/inst/Zfh/fcvt.w.h.yaml +33 -0
  2106. data/.data/spec/std/isa/inst/Zfh/fcvt.wu.h.yaml +33 -0
  2107. data/.data/spec/std/isa/inst/Zfh/fdiv.h.yaml +35 -0
  2108. data/.data/spec/std/isa/inst/Zfh/feq.h.yaml +33 -0
  2109. data/.data/spec/std/isa/inst/Zfh/fle.h.yaml +33 -0
  2110. data/.data/spec/std/isa/inst/Zfh/fleq.h.yaml +33 -0
  2111. data/.data/spec/std/isa/inst/Zfh/flh.yaml +78 -0
  2112. data/.data/spec/std/isa/inst/Zfh/fli.h.yaml +31 -0
  2113. data/.data/spec/std/isa/inst/Zfh/flt.h.yaml +33 -0
  2114. data/.data/spec/std/isa/inst/Zfh/fltq.h.yaml +33 -0
  2115. data/.data/spec/std/isa/inst/Zfh/fmadd.h.yaml +37 -0
  2116. data/.data/spec/std/isa/inst/Zfh/fmax.h.yaml +33 -0
  2117. data/.data/spec/std/isa/inst/Zfh/fmaxm.h.yaml +33 -0
  2118. data/.data/spec/std/isa/inst/Zfh/fmin.h.yaml +33 -0
  2119. data/.data/spec/std/isa/inst/Zfh/fminm.h.yaml +33 -0
  2120. data/.data/spec/std/isa/inst/Zfh/fmsub.h.yaml +37 -0
  2121. data/.data/spec/std/isa/inst/Zfh/fmul.h.yaml +35 -0
  2122. data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +51 -0
  2123. data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +51 -0
  2124. data/.data/spec/std/isa/inst/Zfh/fnmadd.h.yaml +37 -0
  2125. data/.data/spec/std/isa/inst/Zfh/fnmsub.h.yaml +37 -0
  2126. data/.data/spec/std/isa/inst/Zfh/fround.h.yaml +33 -0
  2127. data/.data/spec/std/isa/inst/Zfh/froundnx.h.yaml +33 -0
  2128. data/.data/spec/std/isa/inst/Zfh/fsgnj.h.yaml +33 -0
  2129. data/.data/spec/std/isa/inst/Zfh/fsgnjn.h.yaml +33 -0
  2130. data/.data/spec/std/isa/inst/Zfh/fsgnjx.h.yaml +33 -0
  2131. data/.data/spec/std/isa/inst/Zfh/fsh.yaml +89 -0
  2132. data/.data/spec/std/isa/inst/Zfh/fsqrt.h.yaml +33 -0
  2133. data/.data/spec/std/isa/inst/Zfh/fsub.h.yaml +35 -0
  2134. data/.data/spec/std/isa/inst/Zicbom/cbo.clean.yaml +77 -0
  2135. data/.data/spec/std/isa/inst/Zicbom/cbo.flush.yaml +75 -0
  2136. data/.data/spec/std/isa/inst/Zicbom/cbo.inval.yaml +116 -0
  2137. data/.data/spec/std/isa/inst/Zicbop/prefetch.i.yaml +34 -0
  2138. data/.data/spec/std/isa/inst/Zicbop/prefetch.r.yaml +34 -0
  2139. data/.data/spec/std/isa/inst/Zicbop/prefetch.w.yaml +34 -0
  2140. data/.data/spec/std/isa/inst/Zicboz/cbo.zero.yaml +107 -0
  2141. data/.data/spec/std/isa/inst/Zicfilp/lpad.yaml +28 -0
  2142. data/.data/spec/std/isa/inst/Zicfiss/ssamoswap.d.yaml +35 -0
  2143. data/.data/spec/std/isa/inst/Zicfiss/ssamoswap.w.yaml +35 -0
  2144. data/.data/spec/std/isa/inst/Zicfiss/sspopchk.x1.yaml +25 -0
  2145. data/.data/spec/std/isa/inst/Zicfiss/sspopchk.x5.yaml +25 -0
  2146. data/.data/spec/std/isa/inst/Zicfiss/sspush.x1.yaml +25 -0
  2147. data/.data/spec/std/isa/inst/Zicfiss/sspush.x5.yaml +25 -0
  2148. data/.data/spec/std/isa/inst/Zicfiss/ssrdp.yaml +28 -0
  2149. data/.data/spec/std/isa/inst/Zicond/czero.eqz.yaml +50 -0
  2150. data/.data/spec/std/isa/inst/Zicond/czero.nez.yaml +50 -0
  2151. data/.data/spec/std/isa/inst/Zicsr/csrrc.yaml +68 -0
  2152. data/.data/spec/std/isa/inst/Zicsr/csrrci.yaml +62 -0
  2153. data/.data/spec/std/isa/inst/Zicsr/csrrs.yaml +114 -0
  2154. data/.data/spec/std/isa/inst/Zicsr/csrrsi.yaml +62 -0
  2155. data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +90 -0
  2156. data/.data/spec/std/isa/inst/Zicsr/csrrwi.yaml +88 -0
  2157. data/.data/spec/std/isa/inst/Zifencei/fence.i.yaml +65 -0
  2158. data/.data/spec/std/isa/inst/Zihintntl/c.ntl.all.yaml +27 -0
  2159. data/.data/spec/std/isa/inst/Zihintntl/c.ntl.p1.yaml +27 -0
  2160. data/.data/spec/std/isa/inst/Zihintntl/c.ntl.pall.yaml +27 -0
  2161. data/.data/spec/std/isa/inst/Zihintntl/c.ntl.s1.yaml +27 -0
  2162. data/.data/spec/std/isa/inst/Zihintntl/ntl.all.yaml +25 -0
  2163. data/.data/spec/std/isa/inst/Zihintntl/ntl.p1.yaml +25 -0
  2164. data/.data/spec/std/isa/inst/Zihintntl/ntl.pall.yaml +25 -0
  2165. data/.data/spec/std/isa/inst/Zihintntl/ntl.s1.yaml +25 -0
  2166. data/.data/spec/std/isa/inst/Zihintpause/pause.yaml +76 -0
  2167. data/.data/spec/std/isa/inst/Zimop/mop.r.0.yaml +36 -0
  2168. data/.data/spec/std/isa/inst/Zimop/mop.r.1.yaml +36 -0
  2169. data/.data/spec/std/isa/inst/Zimop/mop.r.10.yaml +36 -0
  2170. data/.data/spec/std/isa/inst/Zimop/mop.r.11.yaml +36 -0
  2171. data/.data/spec/std/isa/inst/Zimop/mop.r.12.yaml +36 -0
  2172. data/.data/spec/std/isa/inst/Zimop/mop.r.13.yaml +36 -0
  2173. data/.data/spec/std/isa/inst/Zimop/mop.r.14.yaml +36 -0
  2174. data/.data/spec/std/isa/inst/Zimop/mop.r.15.yaml +36 -0
  2175. data/.data/spec/std/isa/inst/Zimop/mop.r.16.yaml +36 -0
  2176. data/.data/spec/std/isa/inst/Zimop/mop.r.17.yaml +36 -0
  2177. data/.data/spec/std/isa/inst/Zimop/mop.r.18.yaml +36 -0
  2178. data/.data/spec/std/isa/inst/Zimop/mop.r.19.yaml +36 -0
  2179. data/.data/spec/std/isa/inst/Zimop/mop.r.2.yaml +36 -0
  2180. data/.data/spec/std/isa/inst/Zimop/mop.r.20.yaml +36 -0
  2181. data/.data/spec/std/isa/inst/Zimop/mop.r.21.yaml +36 -0
  2182. data/.data/spec/std/isa/inst/Zimop/mop.r.22.yaml +36 -0
  2183. data/.data/spec/std/isa/inst/Zimop/mop.r.23.yaml +36 -0
  2184. data/.data/spec/std/isa/inst/Zimop/mop.r.24.yaml +36 -0
  2185. data/.data/spec/std/isa/inst/Zimop/mop.r.25.yaml +36 -0
  2186. data/.data/spec/std/isa/inst/Zimop/mop.r.26.yaml +36 -0
  2187. data/.data/spec/std/isa/inst/Zimop/mop.r.27.yaml +36 -0
  2188. data/.data/spec/std/isa/inst/Zimop/mop.r.28.yaml +40 -0
  2189. data/.data/spec/std/isa/inst/Zimop/mop.r.29.yaml +36 -0
  2190. data/.data/spec/std/isa/inst/Zimop/mop.r.3.yaml +36 -0
  2191. data/.data/spec/std/isa/inst/Zimop/mop.r.30.yaml +36 -0
  2192. data/.data/spec/std/isa/inst/Zimop/mop.r.31.yaml +36 -0
  2193. data/.data/spec/std/isa/inst/Zimop/mop.r.4.yaml +36 -0
  2194. data/.data/spec/std/isa/inst/Zimop/mop.r.5.yaml +36 -0
  2195. data/.data/spec/std/isa/inst/Zimop/mop.r.6.yaml +36 -0
  2196. data/.data/spec/std/isa/inst/Zimop/mop.r.7.yaml +36 -0
  2197. data/.data/spec/std/isa/inst/Zimop/mop.r.8.yaml +36 -0
  2198. data/.data/spec/std/isa/inst/Zimop/mop.r.9.yaml +36 -0
  2199. data/.data/spec/std/isa/inst/Zimop/mop.r.N.layout +58 -0
  2200. data/.data/spec/std/isa/inst/Zimop/mop.rr.0.yaml +39 -0
  2201. data/.data/spec/std/isa/inst/Zimop/mop.rr.1.yaml +39 -0
  2202. data/.data/spec/std/isa/inst/Zimop/mop.rr.2.yaml +39 -0
  2203. data/.data/spec/std/isa/inst/Zimop/mop.rr.3.yaml +39 -0
  2204. data/.data/spec/std/isa/inst/Zimop/mop.rr.4.yaml +39 -0
  2205. data/.data/spec/std/isa/inst/Zimop/mop.rr.5.yaml +39 -0
  2206. data/.data/spec/std/isa/inst/Zimop/mop.rr.6.yaml +39 -0
  2207. data/.data/spec/std/isa/inst/Zimop/mop.rr.7.yaml +42 -0
  2208. data/.data/spec/std/isa/inst/Zimop/mop.rr.N.layout +58 -0
  2209. data/.data/spec/std/isa/inst/Zkn/aes64ks1i.yaml +37 -0
  2210. data/.data/spec/std/isa/inst/Zkn/aes64ks2.yaml +36 -0
  2211. data/.data/spec/std/isa/inst/Zknd/aes32dsi.yaml +37 -0
  2212. data/.data/spec/std/isa/inst/Zknd/aes32dsmi.yaml +38 -0
  2213. data/.data/spec/std/isa/inst/Zknd/aes64ds.yaml +34 -0
  2214. data/.data/spec/std/isa/inst/Zknd/aes64dsm.yaml +34 -0
  2215. data/.data/spec/std/isa/inst/Zknd/aes64im.yaml +33 -0
  2216. data/.data/spec/std/isa/inst/Zkne/aes32esi.yaml +35 -0
  2217. data/.data/spec/std/isa/inst/Zkne/aes32esmi.yaml +35 -0
  2218. data/.data/spec/std/isa/inst/Zkne/aes64es.yaml +34 -0
  2219. data/.data/spec/std/isa/inst/Zkne/aes64esm.yaml +34 -0
  2220. data/.data/spec/std/isa/inst/Zknh/sha256sig0.yaml +29 -0
  2221. data/.data/spec/std/isa/inst/Zknh/sha256sig1.yaml +29 -0
  2222. data/.data/spec/std/isa/inst/Zknh/sha256sum0.yaml +29 -0
  2223. data/.data/spec/std/isa/inst/Zknh/sha256sum1.yaml +29 -0
  2224. data/.data/spec/std/isa/inst/Zknh/sha512sig0.yaml +31 -0
  2225. data/.data/spec/std/isa/inst/Zknh/sha512sig0h.yaml +33 -0
  2226. data/.data/spec/std/isa/inst/Zknh/sha512sig0l.yaml +33 -0
  2227. data/.data/spec/std/isa/inst/Zknh/sha512sig1.yaml +31 -0
  2228. data/.data/spec/std/isa/inst/Zknh/sha512sig1h.yaml +33 -0
  2229. data/.data/spec/std/isa/inst/Zknh/sha512sig1l.yaml +33 -0
  2230. data/.data/spec/std/isa/inst/Zknh/sha512sum0.yaml +31 -0
  2231. data/.data/spec/std/isa/inst/Zknh/sha512sum0r.yaml +33 -0
  2232. data/.data/spec/std/isa/inst/Zknh/sha512sum1.yaml +31 -0
  2233. data/.data/spec/std/isa/inst/Zknh/sha512sum1r.yaml +33 -0
  2234. data/.data/spec/std/isa/inst/Zks/sm3p0.yaml +29 -0
  2235. data/.data/spec/std/isa/inst/Zks/sm3p1.yaml +29 -0
  2236. data/.data/spec/std/isa/inst/Zks/sm4ed.yaml +33 -0
  2237. data/.data/spec/std/isa/inst/Zks/sm4ks.yaml +33 -0
  2238. data/.data/spec/std/isa/inst/Zvbb/vandn.vv.yaml +33 -0
  2239. data/.data/spec/std/isa/inst/Zvbb/vandn.vx.yaml +33 -0
  2240. data/.data/spec/std/isa/inst/Zvbb/vbrev.v.yaml +31 -0
  2241. data/.data/spec/std/isa/inst/Zvbb/vbrev8.v.yaml +31 -0
  2242. data/.data/spec/std/isa/inst/Zvbb/vclz.v.yaml +31 -0
  2243. data/.data/spec/std/isa/inst/Zvbb/vcpop.v.yaml +31 -0
  2244. data/.data/spec/std/isa/inst/Zvbb/vctz.v.yaml +31 -0
  2245. data/.data/spec/std/isa/inst/Zvbb/vrev8.v.yaml +31 -0
  2246. data/.data/spec/std/isa/inst/Zvbb/vrol.vv.yaml +33 -0
  2247. data/.data/spec/std/isa/inst/Zvbb/vrol.vx.yaml +33 -0
  2248. data/.data/spec/std/isa/inst/Zvbb/vror.vi.yaml +33 -0
  2249. data/.data/spec/std/isa/inst/Zvbb/vror.vv.yaml +33 -0
  2250. data/.data/spec/std/isa/inst/Zvbb/vror.vx.yaml +33 -0
  2251. data/.data/spec/std/isa/inst/Zvbb/vwsll.vi.yaml +33 -0
  2252. data/.data/spec/std/isa/inst/Zvbb/vwsll.vv.yaml +33 -0
  2253. data/.data/spec/std/isa/inst/Zvbb/vwsll.vx.yaml +33 -0
  2254. data/.data/spec/std/isa/inst/Zvbc/vclmul.vv.yaml +33 -0
  2255. data/.data/spec/std/isa/inst/Zvbc/vclmul.vx.yaml +33 -0
  2256. data/.data/spec/std/isa/inst/Zvbc/vclmulh.vv.yaml +33 -0
  2257. data/.data/spec/std/isa/inst/Zvbc/vclmulh.vx.yaml +33 -0
  2258. data/.data/spec/std/isa/inst/Zvfbfmin/vfncvtbf16.f.f.w.yaml +31 -0
  2259. data/.data/spec/std/isa/inst/Zvfbfmin/vfwcvtbf16.f.f.v.yaml +31 -0
  2260. data/.data/spec/std/isa/inst/Zvfbfwma/vfwmaccbf16.vf.yaml +33 -0
  2261. data/.data/spec/std/isa/inst/Zvfbfwma/vfwmaccbf16.vv.yaml +33 -0
  2262. data/.data/spec/std/isa/inst/Zvkg/vghsh.vv.yaml +31 -0
  2263. data/.data/spec/std/isa/inst/Zvkg/vgmul.vv.yaml +29 -0
  2264. data/.data/spec/std/isa/inst/Zvkned/vaesdf.vs.yaml +29 -0
  2265. data/.data/spec/std/isa/inst/Zvkned/vaesdf.vv.yaml +29 -0
  2266. data/.data/spec/std/isa/inst/Zvkned/vaesdm.vs.yaml +29 -0
  2267. data/.data/spec/std/isa/inst/Zvkned/vaesdm.vv.yaml +29 -0
  2268. data/.data/spec/std/isa/inst/Zvkned/vaesef.vs.yaml +29 -0
  2269. data/.data/spec/std/isa/inst/Zvkned/vaesef.vv.yaml +29 -0
  2270. data/.data/spec/std/isa/inst/Zvkned/vaesem.vs.yaml +29 -0
  2271. data/.data/spec/std/isa/inst/Zvkned/vaesem.vv.yaml +29 -0
  2272. data/.data/spec/std/isa/inst/Zvkned/vaeskf1.vi.yaml +31 -0
  2273. data/.data/spec/std/isa/inst/Zvkned/vaeskf2.vi.yaml +31 -0
  2274. data/.data/spec/std/isa/inst/Zvkned/vaesz.vs.yaml +29 -0
  2275. data/.data/spec/std/isa/inst/Zvknha/vsha2ch.vv.yaml +31 -0
  2276. data/.data/spec/std/isa/inst/Zvknha/vsha2cl.vv.yaml +31 -0
  2277. data/.data/spec/std/isa/inst/Zvknha/vsha2ms.vv.yaml +31 -0
  2278. data/.data/spec/std/isa/inst/Zvks/vsm3c.vi.yaml +31 -0
  2279. data/.data/spec/std/isa/inst/Zvks/vsm3me.vv.yaml +31 -0
  2280. data/.data/spec/std/isa/inst/Zvks/vsm4k.vi.yaml +31 -0
  2281. data/.data/spec/std/isa/inst/Zvks/vsm4r.vs.yaml +29 -0
  2282. data/.data/spec/std/isa/inst/Zvks/vsm4r.vv.yaml +31 -0
  2283. data/.data/spec/std/isa/inst_opcode/OP-32.yaml +12 -0
  2284. data/.data/spec/std/isa/inst_opcode/OP.yaml +12 -0
  2285. data/.data/spec/std/isa/inst_subtype/I/I-x-x.yaml +21 -0
  2286. data/.data/spec/std/isa/inst_subtype/R/R-x.yaml +21 -0
  2287. data/.data/spec/std/isa/inst_type/I.yaml +22 -0
  2288. data/.data/spec/std/isa/inst_type/R.yaml +24 -0
  2289. data/.data/spec/std/isa/inst_var/I-imm.yaml +12 -0
  2290. data/.data/spec/std/isa/inst_var/xd.yaml +12 -0
  2291. data/.data/spec/std/isa/inst_var/xs1.yaml +12 -0
  2292. data/.data/spec/std/isa/inst_var/xs2.yaml +12 -0
  2293. data/.data/spec/std/isa/inst_var_type/imm.yaml +9 -0
  2294. data/.data/spec/std/isa/inst_var_type/x_dst_reg.yaml +11 -0
  2295. data/.data/spec/std/isa/inst_var_type/x_src_reg.yaml +11 -0
  2296. data/.data/spec/std/isa/interrupt_code/LocalCounterOverflow.yaml +14 -0
  2297. data/.data/spec/std/isa/interrupt_code/MachineExternal.yaml +13 -0
  2298. data/.data/spec/std/isa/interrupt_code/MachineSoftware.yaml +13 -0
  2299. data/.data/spec/std/isa/interrupt_code/MachineTimer.yaml +13 -0
  2300. data/.data/spec/std/isa/interrupt_code/SupervisorExternal.yaml +13 -0
  2301. data/.data/spec/std/isa/interrupt_code/SupervisorGuestExternal.yaml +13 -0
  2302. data/.data/spec/std/isa/interrupt_code/SupervisorSoftware.yaml +13 -0
  2303. data/.data/spec/std/isa/interrupt_code/SupervisorTimer.yaml +13 -0
  2304. data/.data/spec/std/isa/interrupt_code/VirtualSupervisorExternal.yaml +13 -0
  2305. data/.data/spec/std/isa/interrupt_code/VirtualSupervisorSoftware.yaml +13 -0
  2306. data/.data/spec/std/isa/interrupt_code/VirtualSupervisorTimer.yaml +13 -0
  2307. data/.data/spec/std/isa/isa/builtin_functions.idl +671 -0
  2308. data/.data/spec/std/isa/isa/fetch.idl +74 -0
  2309. data/.data/spec/std/isa/isa/fp.idl +1238 -0
  2310. data/.data/spec/std/isa/isa/globals.isa +3124 -0
  2311. data/.data/spec/std/isa/isa/interrupts.idl +391 -0
  2312. data/.data/spec/std/isa/isa/util.idl +224 -0
  2313. data/.data/spec/std/isa/isa/vec.idl +55 -0
  2314. data/.data/spec/std/isa/manual/isa.yaml +16 -0
  2315. data/.data/spec/std/isa/manual_version/isa/20240411/isa_20240411.yaml +222 -0
  2316. data/.data/spec/std/isa/param/ARCH_ID_VALUE.yaml +32 -0
  2317. data/.data/spec/std/isa/param/ASID_WIDTH.yaml +23 -0
  2318. data/.data/spec/std/isa/param/CACHE_BLOCK_SIZE.yaml +22 -0
  2319. data/.data/spec/std/isa/param/CONFIG_PTR_ADDRESS.yaml +28 -0
  2320. data/.data/spec/std/isa/param/COUNTINHIBIT_EN.yaml +30 -0
  2321. data/.data/spec/std/isa/param/DBG_HCONTEXT_WIDTH.yaml +18 -0
  2322. data/.data/spec/std/isa/param/DBG_SCONTEXT_WIDTH.yaml +18 -0
  2323. data/.data/spec/std/isa/param/DCSR_MPRVEN_TYPE.yaml +23 -0
  2324. data/.data/spec/std/isa/param/DCSR_STEPIE_TYPE.yaml +23 -0
  2325. data/.data/spec/std/isa/param/DCSR_STOPCOUNT_TYPE.yaml +23 -0
  2326. data/.data/spec/std/isa/param/DCSR_STOPTIME_TYPE.yaml +23 -0
  2327. data/.data/spec/std/isa/param/ELEN.yaml +20 -0
  2328. data/.data/spec/std/isa/param/FOLLOW_VTYPE_RESET_RECOMMENDATION.yaml +18 -0
  2329. data/.data/spec/std/isa/param/FORCE_UPGRADE_CBO_INVAL_TO_FLUSH.yaml +20 -0
  2330. data/.data/spec/std/isa/param/GSTAGE_MODE_BARE.yaml +24 -0
  2331. data/.data/spec/std/isa/param/HCONTEXT_AVAILABLE.yaml +19 -0
  2332. data/.data/spec/std/isa/param/HCOUNTENABLE_EN.yaml +27 -0
  2333. data/.data/spec/std/isa/param/HPM_COUNTER_EN.yaml +29 -0
  2334. data/.data/spec/std/isa/param/HPM_EVENTS.yaml +23 -0
  2335. data/.data/spec/std/isa/param/HSTATEEN_AIA_TYPE.yaml +34 -0
  2336. data/.data/spec/std/isa/param/HSTATEEN_CONTEXT_TYPE.yaml +35 -0
  2337. data/.data/spec/std/isa/param/HSTATEEN_CSRIND_TYPE.yaml +34 -0
  2338. data/.data/spec/std/isa/param/HSTATEEN_ENVCFG_TYPE.yaml +36 -0
  2339. data/.data/spec/std/isa/param/HSTATEEN_IMSIC_TYPE.yaml +34 -0
  2340. data/.data/spec/std/isa/param/HSTATEEN_JVT_TYPE.yaml +33 -0
  2341. data/.data/spec/std/isa/param/HW_MSTATUS_FS_DIRTY_UPDATE.yaml +30 -0
  2342. data/.data/spec/std/isa/param/HW_MSTATUS_VS_DIRTY_UPDATE.yaml +30 -0
  2343. data/.data/spec/std/isa/param/IGNORE_INVALID_VSATP_MODE_WRITES_WHEN_V_EQ_ZERO.yaml +18 -0
  2344. data/.data/spec/std/isa/param/IMPRECISE_VECTOR_TRAP_SETTABLE.yaml +19 -0
  2345. data/.data/spec/std/isa/param/IMP_ID_VALUE.yaml +25 -0
  2346. data/.data/spec/std/isa/param/JVT_BASE_MASK.yaml +28 -0
  2347. data/.data/spec/std/isa/param/JVT_BASE_TYPE.yaml +20 -0
  2348. data/.data/spec/std/isa/param/JVT_READ_ONLY.yaml +16 -0
  2349. data/.data/spec/std/isa/param/LEGAL_VSTART.yaml +21 -0
  2350. data/.data/spec/std/isa/param/LRSC_FAIL_ON_NON_EXACT_LRSC.yaml +18 -0
  2351. data/.data/spec/std/isa/param/LRSC_FAIL_ON_VA_SYNONYM.yaml +17 -0
  2352. data/.data/spec/std/isa/param/LRSC_MISALIGNED_BEHAVIOR.yaml +24 -0
  2353. data/.data/spec/std/isa/param/LRSC_RESERVATION_STRATEGY.yaml +26 -0
  2354. data/.data/spec/std/isa/param/MARCHID_IMPLEMENTED.yaml +17 -0
  2355. data/.data/spec/std/isa/param/MCID_WIDTH.yaml +19 -0
  2356. data/.data/spec/std/isa/param/MCONTEXT_AVAILABLE.yaml +16 -0
  2357. data/.data/spec/std/isa/param/MCOUNTENABLE_EN.yaml +32 -0
  2358. data/.data/spec/std/isa/param/MCTRCTL_CORSWAPINH_IMPLEMENTED.yaml +18 -0
  2359. data/.data/spec/std/isa/param/MCTRCTL_CUSTOM_IMPLEMENTED.yaml +18 -0
  2360. data/.data/spec/std/isa/param/MCTRCTL_DIRCALLINH_IMPLEMENTED.yaml +18 -0
  2361. data/.data/spec/std/isa/param/MCTRCTL_DIRJMPINH_IMPLEMENTED.yaml +18 -0
  2362. data/.data/spec/std/isa/param/MCTRCTL_DIRLJMPINH_IMPLEMENTED.yaml +18 -0
  2363. data/.data/spec/std/isa/param/MCTRCTL_EXCINH_IMPLEMENTED.yaml +18 -0
  2364. data/.data/spec/std/isa/param/MCTRCTL_INDCALLINH_IMPLEMENTED.yaml +18 -0
  2365. data/.data/spec/std/isa/param/MCTRCTL_INDJMPINH_IMPLEMENTED.yaml +18 -0
  2366. data/.data/spec/std/isa/param/MCTRCTL_INDLJMPINH_IMPLEMENTED.yaml +18 -0
  2367. data/.data/spec/std/isa/param/MCTRCTL_INTRINH_IMPLEMENTED.yaml +18 -0
  2368. data/.data/spec/std/isa/param/MCTRCTL_MTE_IMPLEMENTED.yaml +18 -0
  2369. data/.data/spec/std/isa/param/MCTRCTL_NTBREN_IMPLEMENTED.yaml +18 -0
  2370. data/.data/spec/std/isa/param/MCTRCTL_RASEMU_IMPLEMENTED.yaml +18 -0
  2371. data/.data/spec/std/isa/param/MCTRCTL_RETINH_IMPLEMENTED.yaml +18 -0
  2372. data/.data/spec/std/isa/param/MCTRCTL_STE_IMPLEMENTED.yaml +18 -0
  2373. data/.data/spec/std/isa/param/MCTRCTL_TKBRINH_IMPLEMENTED.yaml +18 -0
  2374. data/.data/spec/std/isa/param/MCTRCTL_TRETINH_IMPLEMENTED.yaml +18 -0
  2375. data/.data/spec/std/isa/param/MIMPID_IMPLEMENTED.yaml +17 -0
  2376. data/.data/spec/std/isa/param/MISALIGNED_AMO.yaml +17 -0
  2377. data/.data/spec/std/isa/param/MISALIGNED_LDST.yaml +18 -0
  2378. data/.data/spec/std/isa/param/MISALIGNED_LDST_EXCEPTION_PRIORITY.yaml +39 -0
  2379. data/.data/spec/std/isa/param/MISALIGNED_MAX_ATOMICITY_GRANULE_SIZE.yaml +40 -0
  2380. data/.data/spec/std/isa/param/MISALIGNED_SPLIT_STRATEGY.yaml +29 -0
  2381. data/.data/spec/std/isa/param/MISA_CSR_IMPLEMENTED.yaml +23 -0
  2382. data/.data/spec/std/isa/param/MOCK_1_BIT_INT.yaml +17 -0
  2383. data/.data/spec/std/isa/param/MOCK_25_BIT_INT.yaml +17 -0
  2384. data/.data/spec/std/isa/param/MOCK_2_BIT_INT.yaml +17 -0
  2385. data/.data/spec/std/isa/param/MOCK_32_BIT_INT.yaml +17 -0
  2386. data/.data/spec/std/isa/param/MOCK_64_BIT_INT.yaml +17 -0
  2387. data/.data/spec/std/isa/param/MOCK_ARRAY_BOOL_ARRAY_OF_8_FIRST_2_FALSE.yaml +22 -0
  2388. data/.data/spec/std/isa/param/MOCK_ARRAY_INT_ENUM.yaml +23 -0
  2389. data/.data/spec/std/isa/param/MOCK_ARRAY_MAX_ONLY.yaml +21 -0
  2390. data/.data/spec/std/isa/param/MOCK_ARRAY_MIN_ONLY.yaml +21 -0
  2391. data/.data/spec/std/isa/param/MOCK_ARRAY_STRING_ENUM1.yaml +21 -0
  2392. data/.data/spec/std/isa/param/MOCK_ARRAY_STRING_ENUM2.yaml +21 -0
  2393. data/.data/spec/std/isa/param/MOCK_BOOL_1.yaml +15 -0
  2394. data/.data/spec/std/isa/param/MOCK_BOOL_2.yaml +15 -0
  2395. data/.data/spec/std/isa/param/MOCK_ENUM_2_INTS.yaml +18 -0
  2396. data/.data/spec/std/isa/param/MOCK_ENUM_2_STRINGS.yaml +18 -0
  2397. data/.data/spec/std/isa/param/MOCK_INT_RANGE_0_TO_1023.yaml +17 -0
  2398. data/.data/spec/std/isa/param/MOCK_INT_RANGE_0_TO_127.yaml +17 -0
  2399. data/.data/spec/std/isa/param/MOCK_INT_RANGE_0_TO_128.yaml +17 -0
  2400. data/.data/spec/std/isa/param/MOCK_INT_RANGE_0_TO_2.yaml +17 -0
  2401. data/.data/spec/std/isa/param/MOCK_INT_RANGE_0_TO_999.yaml +17 -0
  2402. data/.data/spec/std/isa/param/MOCK_INT_RANGE_1000_TO_2048.yaml +17 -0
  2403. data/.data/spec/std/isa/param/MOCK_INT_RANGE_1_TO_128.yaml +17 -0
  2404. data/.data/spec/std/isa/param/MSTATEEN_AIA_TYPE.yaml +27 -0
  2405. data/.data/spec/std/isa/param/MSTATEEN_CONTEXT_TYPE.yaml +26 -0
  2406. data/.data/spec/std/isa/param/MSTATEEN_CSRIND_TYPE.yaml +26 -0
  2407. data/.data/spec/std/isa/param/MSTATEEN_ENVCFG_TYPE.yaml +26 -0
  2408. data/.data/spec/std/isa/param/MSTATEEN_IMSIC_TYPE.yaml +27 -0
  2409. data/.data/spec/std/isa/param/MSTATEEN_JVT_TYPE.yaml +27 -0
  2410. data/.data/spec/std/isa/param/MSTATUS_FS_LEGAL_VALUES.yaml +41 -0
  2411. data/.data/spec/std/isa/param/MSTATUS_TVM_IMPLEMENTED.yaml +18 -0
  2412. data/.data/spec/std/isa/param/MSTATUS_VS_LEGAL_VALUES.yaml +45 -0
  2413. data/.data/spec/std/isa/param/MTVAL_WIDTH.yaml +88 -0
  2414. data/.data/spec/std/isa/param/MTVEC_ACCESS.yaml +24 -0
  2415. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_DIRECT.yaml +96 -0
  2416. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_VECTORED.yaml +96 -0
  2417. data/.data/spec/std/isa/param/MTVEC_ILLEGAL_WRITE_BEHAVIOR.yaml +25 -0
  2418. data/.data/spec/std/isa/param/MTVEC_MODES.yaml +35 -0
  2419. data/.data/spec/std/isa/param/MUTABLE_MISA_A.yaml +19 -0
  2420. data/.data/spec/std/isa/param/MUTABLE_MISA_B.yaml +18 -0
  2421. data/.data/spec/std/isa/param/MUTABLE_MISA_C.yaml +21 -0
  2422. data/.data/spec/std/isa/param/MUTABLE_MISA_D.yaml +21 -0
  2423. data/.data/spec/std/isa/param/MUTABLE_MISA_F.yaml +21 -0
  2424. data/.data/spec/std/isa/param/MUTABLE_MISA_H.yaml +26 -0
  2425. data/.data/spec/std/isa/param/MUTABLE_MISA_M.yaml +21 -0
  2426. data/.data/spec/std/isa/param/MUTABLE_MISA_Q.yaml +21 -0
  2427. data/.data/spec/std/isa/param/MUTABLE_MISA_S.yaml +26 -0
  2428. data/.data/spec/std/isa/param/MUTABLE_MISA_U.yaml +21 -0
  2429. data/.data/spec/std/isa/param/MUTABLE_MISA_V.yaml +17 -0
  2430. data/.data/spec/std/isa/param/MXLEN.yaml +54 -0
  2431. data/.data/spec/std/isa/param/M_MODE_ENDIANNESS.yaml +26 -0
  2432. data/.data/spec/std/isa/param/NUM_EXTERNAL_GUEST_INTERRUPTS.yaml +24 -0
  2433. data/.data/spec/std/isa/param/NUM_PMP_ENTRIES.yaml +42 -0
  2434. data/.data/spec/std/isa/param/PHYS_ADDR_WIDTH.yaml +24 -0
  2435. data/.data/spec/std/isa/param/PMA_GRANULARITY.yaml +21 -0
  2436. data/.data/spec/std/isa/param/PMLEN.yaml +20 -0
  2437. data/.data/spec/std/isa/param/PMP_GRANULARITY.yaml +25 -0
  2438. data/.data/spec/std/isa/param/PRECISE_SYNCHRONOUS_EXCEPTIONS.yaml +17 -0
  2439. data/.data/spec/std/isa/param/RCID_WIDTH.yaml +19 -0
  2440. data/.data/spec/std/isa/param/REPORT_CAUSE_IN_MTVAL_ON_LANDING_PAD_SOFTWARE_CHECK.yaml +18 -0
  2441. data/.data/spec/std/isa/param/REPORT_CAUSE_IN_MTVAL_ON_SHADOW_STACK_SOFTWARE_CHECK.yaml +18 -0
  2442. data/.data/spec/std/isa/param/REPORT_CAUSE_IN_STVAL_ON_LANDING_PAD_SOFTWARE_CHECK.yaml +18 -0
  2443. data/.data/spec/std/isa/param/REPORT_CAUSE_IN_STVAL_ON_SHADOW_STACK_SOFTWARE_CHECK.yaml +18 -0
  2444. data/.data/spec/std/isa/param/REPORT_CAUSE_IN_VSTVAL_ON_LANDING_PAD_SOFTWARE_CHECK.yaml +18 -0
  2445. data/.data/spec/std/isa/param/REPORT_CAUSE_IN_VSTVAL_ON_SHADOW_STACK_SOFTWARE_CHECK.yaml +18 -0
  2446. data/.data/spec/std/isa/param/REPORT_ENCODING_IN_MTVAL_ON_ILLEGAL_INSTRUCTION.yaml +21 -0
  2447. data/.data/spec/std/isa/param/REPORT_ENCODING_IN_STVAL_ON_ILLEGAL_INSTRUCTION.yaml +19 -0
  2448. data/.data/spec/std/isa/param/REPORT_ENCODING_IN_VSTVAL_ON_ILLEGAL_INSTRUCTION.yaml +19 -0
  2449. data/.data/spec/std/isa/param/REPORT_ENCODING_IN_VSTVAL_ON_VIRTUAL_INSTRUCTION.yaml +19 -0
  2450. data/.data/spec/std/isa/param/REPORT_GPA_IN_HTVAL_ON_GUEST_PAGE_FAULT.yaml +19 -0
  2451. data/.data/spec/std/isa/param/REPORT_GPA_IN_TVAL_ON_INSTRUCTION_GUEST_PAGE_FAULT.yaml +18 -0
  2452. data/.data/spec/std/isa/param/REPORT_GPA_IN_TVAL_ON_INTERMEDIATE_GUEST_PAGE_FAULT.yaml +19 -0
  2453. data/.data/spec/std/isa/param/REPORT_GPA_IN_TVAL_ON_LOAD_GUEST_PAGE_FAULT.yaml +18 -0
  2454. data/.data/spec/std/isa/param/REPORT_GPA_IN_TVAL_ON_STORE_AMO_GUEST_PAGE_FAULT.yaml +18 -0
  2455. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_BREAKPOINT.yaml +23 -0
  2456. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_INSTRUCTION_ACCESS_FAULT.yaml +21 -0
  2457. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_INSTRUCTION_MISALIGNED.yaml +21 -0
  2458. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_INSTRUCTION_PAGE_FAULT.yaml +20 -0
  2459. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_LOAD_ACCESS_FAULT.yaml +21 -0
  2460. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_LOAD_MISALIGNED.yaml +21 -0
  2461. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_LOAD_PAGE_FAULT.yaml +19 -0
  2462. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_STORE_AMO_ACCESS_FAULT.yaml +21 -0
  2463. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_STORE_AMO_MISALIGNED.yaml +21 -0
  2464. data/.data/spec/std/isa/param/REPORT_VA_IN_MTVAL_ON_STORE_AMO_PAGE_FAULT.yaml +19 -0
  2465. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_BREAKPOINT.yaml +20 -0
  2466. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_INSTRUCTION_ACCESS_FAULT.yaml +20 -0
  2467. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_INSTRUCTION_MISALIGNED.yaml +21 -0
  2468. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_INSTRUCTION_PAGE_FAULT.yaml +20 -0
  2469. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_LOAD_ACCESS_FAULT.yaml +19 -0
  2470. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_LOAD_MISALIGNED.yaml +20 -0
  2471. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_LOAD_PAGE_FAULT.yaml +19 -0
  2472. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_STORE_AMO_ACCESS_FAULT.yaml +19 -0
  2473. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_STORE_AMO_MISALIGNED.yaml +20 -0
  2474. data/.data/spec/std/isa/param/REPORT_VA_IN_STVAL_ON_STORE_AMO_PAGE_FAULT.yaml +19 -0
  2475. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_BREAKPOINT.yaml +20 -0
  2476. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_INSTRUCTION_ACCESS_FAULT.yaml +20 -0
  2477. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_INSTRUCTION_MISALIGNED.yaml +21 -0
  2478. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_INSTRUCTION_PAGE_FAULT.yaml +20 -0
  2479. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_LOAD_ACCESS_FAULT.yaml +19 -0
  2480. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_LOAD_MISALIGNED.yaml +20 -0
  2481. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_LOAD_PAGE_FAULT.yaml +19 -0
  2482. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_STORE_AMO_ACCESS_FAULT.yaml +19 -0
  2483. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_STORE_AMO_MISALIGNED.yaml +20 -0
  2484. data/.data/spec/std/isa/param/REPORT_VA_IN_VSTVAL_ON_STORE_AMO_PAGE_FAULT.yaml +19 -0
  2485. data/.data/spec/std/isa/param/RESERVED_VSET_X0X0_VILL_SET.yaml +21 -0
  2486. data/.data/spec/std/isa/param/RESERVED_VSET_X0X0_VLMAX_CHANGE.yaml +20 -0
  2487. data/.data/spec/std/isa/param/RVV_VL_WHEN_AVL_LT_DOUBLE_VLMAX.yaml +17 -0
  2488. data/.data/spec/std/isa/param/SATP_MODE_BARE.yaml +17 -0
  2489. data/.data/spec/std/isa/param/SCOUNTENABLE_EN.yaml +46 -0
  2490. data/.data/spec/std/isa/param/SEW_MIN.yaml +27 -0
  2491. data/.data/spec/std/isa/param/SSTATEEN_JVT_TYPE.yaml +37 -0
  2492. data/.data/spec/std/isa/param/STVAL_WIDTH.yaml +19 -0
  2493. data/.data/spec/std/isa/param/STVEC_MODE_DIRECT.yaml +21 -0
  2494. data/.data/spec/std/isa/param/STVEC_MODE_VECTORED.yaml +19 -0
  2495. data/.data/spec/std/isa/param/SUPPORT_FRACTIONAL_LMUL_BEYOND_REQUIRED.yaml +21 -0
  2496. data/.data/spec/std/isa/param/SV32X4_TRANSLATION.yaml +24 -0
  2497. data/.data/spec/std/isa/param/SV32_VSMODE_TRANSLATION.yaml +27 -0
  2498. data/.data/spec/std/isa/param/SV39X4_TRANSLATION.yaml +23 -0
  2499. data/.data/spec/std/isa/param/SV39_VSMODE_TRANSLATION.yaml +27 -0
  2500. data/.data/spec/std/isa/param/SV48X4_TRANSLATION.yaml +27 -0
  2501. data/.data/spec/std/isa/param/SV48_VSMODE_TRANSLATION.yaml +27 -0
  2502. data/.data/spec/std/isa/param/SV57X4_TRANSLATION.yaml +25 -0
  2503. data/.data/spec/std/isa/param/SV57_VSMODE_TRANSLATION.yaml +27 -0
  2504. data/.data/spec/std/isa/param/SXLEN.yaml +31 -0
  2505. data/.data/spec/std/isa/param/S_MODE_ENDIANNESS.yaml +25 -0
  2506. data/.data/spec/std/isa/param/TIME_CSR_IMPLEMENTED.yaml +28 -0
  2507. data/.data/spec/std/isa/param/TINST_VALUE_ON_BREAKPOINT.yaml +23 -0
  2508. data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_INSTRUCTION_GUEST_PAGE_FAULT.yaml +23 -0
  2509. data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_LOAD_GUEST_PAGE_FAULT.yaml +27 -0
  2510. data/.data/spec/std/isa/param/TINST_VALUE_ON_FINAL_STORE_AMO_GUEST_PAGE_FAULT.yaml +27 -0
  2511. data/.data/spec/std/isa/param/TINST_VALUE_ON_INSTRUCTION_ADDRESS_MISALIGNED.yaml +23 -0
  2512. data/.data/spec/std/isa/param/TINST_VALUE_ON_LOAD_ACCESS_FAULT.yaml +25 -0
  2513. data/.data/spec/std/isa/param/TINST_VALUE_ON_LOAD_ADDRESS_MISALIGNED.yaml +25 -0
  2514. data/.data/spec/std/isa/param/TINST_VALUE_ON_LOAD_PAGE_FAULT.yaml +25 -0
  2515. data/.data/spec/std/isa/param/TINST_VALUE_ON_MCALL.yaml +23 -0
  2516. data/.data/spec/std/isa/param/TINST_VALUE_ON_SCALL.yaml +23 -0
  2517. data/.data/spec/std/isa/param/TINST_VALUE_ON_STORE_AMO_ACCESS_FAULT.yaml +25 -0
  2518. data/.data/spec/std/isa/param/TINST_VALUE_ON_STORE_AMO_ADDRESS_MISALIGNED.yaml +25 -0
  2519. data/.data/spec/std/isa/param/TINST_VALUE_ON_STORE_AMO_PAGE_FAULT.yaml +25 -0
  2520. data/.data/spec/std/isa/param/TINST_VALUE_ON_UCALL.yaml +23 -0
  2521. data/.data/spec/std/isa/param/TINST_VALUE_ON_VIRTUAL_INSTRUCTION.yaml +23 -0
  2522. data/.data/spec/std/isa/param/TINST_VALUE_ON_VSCALL.yaml +23 -0
  2523. data/.data/spec/std/isa/param/TRAP_ON_EBREAK.yaml +17 -0
  2524. data/.data/spec/std/isa/param/TRAP_ON_ECALL_FROM_M.yaml +17 -0
  2525. data/.data/spec/std/isa/param/TRAP_ON_ECALL_FROM_S.yaml +20 -0
  2526. data/.data/spec/std/isa/param/TRAP_ON_ECALL_FROM_U.yaml +20 -0
  2527. data/.data/spec/std/isa/param/TRAP_ON_ECALL_FROM_VS.yaml +20 -0
  2528. data/.data/spec/std/isa/param/TRAP_ON_ILLEGAL_WLRL.yaml +21 -0
  2529. data/.data/spec/std/isa/param/TRAP_ON_RESERVED_INSTRUCTION.yaml +24 -0
  2530. data/.data/spec/std/isa/param/TRAP_ON_SFENCE_VMA_WHEN_SATP_MODE_IS_READ_ONLY.yaml +31 -0
  2531. data/.data/spec/std/isa/param/TRAP_ON_UNIMPLEMENTED_CSR.yaml +21 -0
  2532. data/.data/spec/std/isa/param/TRAP_ON_UNIMPLEMENTED_INSTRUCTION.yaml +23 -0
  2533. data/.data/spec/std/isa/param/UXLEN.yaml +31 -0
  2534. data/.data/spec/std/isa/param/U_MODE_ENDIANNESS.yaml +25 -0
  2535. data/.data/spec/std/isa/param/VECTOR_FF_NO_EXCEPTION_TRIM.yaml +19 -0
  2536. data/.data/spec/std/isa/param/VECTOR_FF_SEG_EXCEPTION_PARTIAL_LOAD.yaml +22 -0
  2537. data/.data/spec/std/isa/param/VECTOR_FF_UPDATE_PAST_TRIM.yaml +22 -0
  2538. data/.data/spec/std/isa/param/VECTOR_LOAD_PAST_TRAP.yaml +19 -0
  2539. data/.data/spec/std/isa/param/VECTOR_LOAD_SEG_FF_OVERWRITE_ELEMENTS_AFTER_FAULT.yaml +21 -0
  2540. data/.data/spec/std/isa/param/VECTOR_LS_INDEX_MAX_EEW.yaml +28 -0
  2541. data/.data/spec/std/isa/param/VECTOR_LS_MISALIGNED_LEGAL.yaml +19 -0
  2542. data/.data/spec/std/isa/param/VECTOR_LS_SEG_PARTIAL_ACCESS.yaml +19 -0
  2543. data/.data/spec/std/isa/param/VECTOR_LS_WHOLEREG_MISALIGNED_LEGAL.yaml +20 -0
  2544. data/.data/spec/std/isa/param/VENDOR_ID_BANK.yaml +20 -0
  2545. data/.data/spec/std/isa/param/VENDOR_ID_OFFSET.yaml +18 -0
  2546. data/.data/spec/std/isa/param/VFREDUSUM_FINAL_NODE_ELEMENT_BEHAVIOR.yaml +20 -0
  2547. data/.data/spec/std/isa/param/VFREDUSUM_INACTIVE_NODE_ELEMENT_BEHAVIOR.yaml +21 -0
  2548. data/.data/spec/std/isa/param/VFREDUSUM_NAN.yaml +22 -0
  2549. data/.data/spec/std/isa/param/VFREDUSUM_NODE_ROUNDING_BEHAVIOR.yaml +23 -0
  2550. data/.data/spec/std/isa/param/VILL_SET_ON_RESERVED_VTYPE.yaml +20 -0
  2551. data/.data/spec/std/isa/param/VLEN.yaml +20 -0
  2552. data/.data/spec/std/isa/param/VMID_WIDTH.yaml +25 -0
  2553. data/.data/spec/std/isa/param/VSSTAGE_MODE_BARE.yaml +24 -0
  2554. data/.data/spec/std/isa/param/VSSTATUS_VS_EXISTS.yaml +19 -0
  2555. data/.data/spec/std/isa/param/VSTVEC_MODE_DIRECT.yaml +21 -0
  2556. data/.data/spec/std/isa/param/VSTVEC_MODE_VECTORED.yaml +21 -0
  2557. data/.data/spec/std/isa/param/VSXLEN.yaml +33 -0
  2558. data/.data/spec/std/isa/param/VS_MODE_ENDIANNESS.yaml +25 -0
  2559. data/.data/spec/std/isa/param/VUXLEN.yaml +30 -0
  2560. data/.data/spec/std/isa/param/VU_MODE_ENDIANNESS.yaml +25 -0
  2561. data/.data/spec/std/isa/proc_cert_class/AC.yaml +13 -0
  2562. data/.data/spec/std/isa/proc_cert_class/MC.yaml +13 -0
  2563. data/.data/spec/std/isa/proc_cert_class/MockProcessor.yaml +13 -0
  2564. data/.data/spec/std/isa/proc_cert_class/RVI.yaml +16 -0
  2565. data/.data/spec/std/isa/proc_cert_model/AC100.yaml +72 -0
  2566. data/.data/spec/std/isa/proc_cert_model/AC200.yaml +58 -0
  2567. data/.data/spec/std/isa/proc_cert_model/MC100-32.yaml +155 -0
  2568. data/.data/spec/std/isa/proc_cert_model/MC100-64.yaml +21 -0
  2569. data/.data/spec/std/isa/proc_cert_model/MC200-32.yaml +60 -0
  2570. data/.data/spec/std/isa/proc_cert_model/MC200-64.yaml +21 -0
  2571. data/.data/spec/std/isa/proc_cert_model/MC300-32.yaml +40 -0
  2572. data/.data/spec/std/isa/proc_cert_model/MC300-64.yaml +21 -0
  2573. data/.data/spec/std/isa/proc_cert_model/RVI20-32.yaml +39 -0
  2574. data/.data/spec/std/isa/proc_cert_model/RVI20-64.yaml +19 -0
  2575. data/.data/spec/std/isa/profile/RVA20S64.yaml +76 -0
  2576. data/.data/spec/std/isa/profile/RVA20U64.yaml +108 -0
  2577. data/.data/spec/std/isa/profile/RVA22S64.yaml +80 -0
  2578. data/.data/spec/std/isa/profile/RVA22U64.yaml +140 -0
  2579. data/.data/spec/std/isa/profile/RVA23M64.yaml +24 -0
  2580. data/.data/spec/std/isa/profile/RVA23S64.yaml +55 -0
  2581. data/.data/spec/std/isa/profile/RVA23U64.yaml +70 -0
  2582. data/.data/spec/std/isa/profile/RVB23M64.yaml +89 -0
  2583. data/.data/spec/std/isa/profile/RVB23S64.yaml +299 -0
  2584. data/.data/spec/std/isa/profile/RVB23U64.yaml +273 -0
  2585. data/.data/spec/std/isa/profile/RVI20U32.yaml +83 -0
  2586. data/.data/spec/std/isa/profile/RVI20U64.yaml +12 -0
  2587. data/.data/spec/std/isa/profile_family/Mock.yaml +24 -0
  2588. data/.data/spec/std/isa/profile_family/RVA.yaml +154 -0
  2589. data/.data/spec/std/isa/profile_family/RVB.yaml +59 -0
  2590. data/.data/spec/std/isa/profile_family/RVI.yaml +37 -0
  2591. data/.data/spec/std/isa/profile_release/RVA20.yaml +44 -0
  2592. data/.data/spec/std/isa/profile_release/RVA22.yaml +44 -0
  2593. data/.data/spec/std/isa/profile_release/RVA23.yaml +40 -0
  2594. data/.data/spec/std/isa/profile_release/RVB23.yaml +40 -0
  2595. data/.data/spec/std/isa/profile_release/RVI20.yaml +31 -0
  2596. data/.data/spec/std/isa/prose/interrupts.adoc +185 -0
  2597. data/.data/spec/std/isa/register_file/F.yaml +165 -0
  2598. data/.data/spec/std/isa/register_file/V.yaml +146 -0
  2599. data/.data/spec/std/isa/register_file/X.yaml +201 -0
  2600. data/LICENSE +26 -0
  2601. data/bin/udb +11 -0
  2602. data/ext/udb_download/extconf.rb +238 -0
  2603. data/lib/tapioca/dsl/compilers/cfg_arch_compiler.rb +38 -0
  2604. data/lib/udb/EQNTOTT_VERSION +1 -0
  2605. data/lib/udb/ESPRESSO_VERSION +1 -0
  2606. data/lib/udb/MUST_VERSION +1 -0
  2607. data/lib/udb/Z3_VERSION +1 -0
  2608. data/lib/udb/architecture.rb +345 -0
  2609. data/lib/udb/cert_normative_rule.rb +41 -0
  2610. data/lib/udb/cfg_arch.rb +1679 -0
  2611. data/lib/udb/cli.rb +424 -0
  2612. data/lib/udb/condition.rb +2143 -0
  2613. data/lib/udb/config.rb +363 -0
  2614. data/lib/udb/dep_paths.rb +109 -0
  2615. data/lib/udb/dep_versions.rb +12 -0
  2616. data/lib/udb/doc_link.rb +49 -0
  2617. data/lib/udb/eqn.rb +204 -0
  2618. data/lib/udb/eqn_parser.rb +804 -0
  2619. data/lib/udb/external_documentation_renderer.rb +466 -0
  2620. data/lib/udb/idl/condition_to_udb.rb +386 -0
  2621. data/lib/udb/log.rb +147 -0
  2622. data/lib/udb/logic.rb +3636 -0
  2623. data/lib/udb/obj/certifiable_obj.rb +21 -0
  2624. data/lib/udb/obj/certificate.rb +230 -0
  2625. data/lib/udb/obj/csr.rb +603 -0
  2626. data/lib/udb/obj/csr_field.rb +877 -0
  2627. data/lib/udb/obj/database_obj.rb +556 -0
  2628. data/lib/udb/obj/exception_code.rb +98 -0
  2629. data/lib/udb/obj/extension.rb +1734 -0
  2630. data/lib/udb/obj/has_fields.rb +151 -0
  2631. data/lib/udb/obj/instruction.rb +1328 -0
  2632. data/lib/udb/obj/manual.rb +208 -0
  2633. data/lib/udb/obj/mmr.rb +104 -0
  2634. data/lib/udb/obj/non_isa_specification.rb +382 -0
  2635. data/lib/udb/obj/parameter.rb +148 -0
  2636. data/lib/udb/obj/portfolio.rb +972 -0
  2637. data/lib/udb/obj/prm.rb +52 -0
  2638. data/lib/udb/obj/profile.rb +284 -0
  2639. data/lib/udb/obj/register_file.rb +118 -0
  2640. data/lib/udb/portfolio_design.rb +256 -0
  2641. data/lib/udb/presence.rb +101 -0
  2642. data/lib/udb/prm_generator.rb +763 -0
  2643. data/lib/udb/proc_cert_design.rb +77 -0
  2644. data/lib/udb/resolver.rb +425 -0
  2645. data/lib/udb/schema.rb +305 -0
  2646. data/lib/udb/version.rb +8 -0
  2647. data/lib/udb/version_spec.rb +334 -0
  2648. data/lib/udb/yaml/comment_parser.rb +422 -0
  2649. data/lib/udb/yaml/preserving_emitter.rb +339 -0
  2650. data/lib/udb/yaml/yaml_resolver.rb +1039 -0
  2651. data/lib/udb/z3.rb +1218 -0
  2652. data/lib/udb/z3_loader.rb +97 -0
  2653. data/lib/udb.rb +25 -0
  2654. metadata +3125 -0
@@ -0,0 +1,3124 @@
1
+ # Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ %version: 1.0
5
+
6
+ include "builtin_functions.idl"
7
+ include "interrupts.idl"
8
+ include "fetch.idl"
9
+ include "util.idl"
10
+ include "fp.idl"
11
+ include "vec.idl"
12
+
13
+ # global state
14
+
15
+ # general purpose register file
16
+ # is BUILTIN storage.
17
+ # This is to accommodate the zero register (x0) without
18
+ # needed ISL language support or hard-to-read function calls
19
+ # on any x register read/write
20
+ # Bits<MXLEN> X[31];
21
+
22
+ ############################################################
23
+ # constants used to indicate special values
24
+ ############################################################
25
+
26
+ # CSR field value is undefined, but whatever it is, it must be legal for the field
27
+ Bits<MXLEN> UNDEFINED_LEGAL;
28
+
29
+ # CSR field value is undefined, but whateer it is, it must be legal for the field and it
30
+ # must be the same value if the same sequence of instructions leading to the read is executed
31
+ Bits<MXLEN> UNDEFINED_LEGAL_DETERMINISTIC;
32
+
33
+ # Signals an illegal write of a WLRL field
34
+ Bits<67> ILLEGAL_WLRL = 67'h40000000000000000;
35
+
36
+ # maximum instruction encoding size
37
+ U32 INSTR_ENC_SIZE = 32;
38
+
39
+ # encoding defined by concatenation of { D, MPV, MPP }:
40
+ # - D : debug mode (1b)
41
+ # - MPV: mstatus.MPV (1b)
42
+ # - MPP: mstatus.MPP (2b)
43
+ enum PrivilegeMode {
44
+ M 0b0011
45
+ S 0b0001
46
+ HS 0b0001 # alias for S when H extension is used
47
+ U 0b0000
48
+ VS 0b0101
49
+ VU 0b0100
50
+ D 0b1011
51
+ }
52
+
53
+ enum MemoryOperation {
54
+ Read
55
+ Write
56
+ ReadModifyWrite
57
+ Fetch
58
+ }
59
+
60
+ # Types of Atomic Read-modify-write operations
61
+ enum AmoOperation {
62
+ Swap
63
+ Add
64
+ And
65
+ Or
66
+ Xor
67
+ Max
68
+ Maxu
69
+ Min
70
+ Minu
71
+ }
72
+
73
+ enum PmaAttribute {
74
+ RsrvNone # LR/SC not allowed
75
+ RsrvNonEventual # LR/SC allowed, but no guarantee it will ever succeed
76
+ RsrvEventual # LR/SC with forward-progress guarantees
77
+
78
+ MAG16 # Misaligned Atomicity Granule = 16-byte
79
+ MAG8 # Misaligned Atomicity Granule = 8-byte
80
+ MAG4 # Misaligned Atomicity Granule = 4-byte
81
+ MAG2 # Misaligned Atomicity Granule = 2-byte
82
+
83
+ AmoNone # No AMOs allowed
84
+ AmoSwap # amoswap is allowed
85
+ AmoLogical # amoswap, amoand, amoor, and amoxor are allowed
86
+ AmoArithmetic # All amos are allowed
87
+
88
+ # page walk permissions
89
+ HardwarePageTableRead # permission to read during a page walk
90
+ HardwarePageTableWrite # permission to write during a page walk
91
+
92
+ # Memory types
93
+ MainMemory # Main memory region
94
+ IO # I/O region
95
+ Cacheable # Cacheable memory region
96
+ Coherent # Coherent memory region
97
+ Idempotent # Idempotent memory region
98
+ }
99
+
100
+ enum Pbmt {
101
+ PMA 0 # Use underlying PMA
102
+ NC 1 # Non-cacheable, idempotent, weakly-ordered (RVWMO), main memory
103
+ IO 2 # Non-cacheable, non-idempotent, strongly (channel 0) ordered, I/O
104
+ }
105
+
106
+ # do not change these values!! the compiler assumes them
107
+ enum CsrFieldType {
108
+ RO 0
109
+ ROH 1
110
+ RW 2
111
+ RWR 3
112
+ RWH 4
113
+ RWRH 5
114
+ }
115
+
116
+ # generated from extension information in arch definition
117
+ generated enum ExtensionName;
118
+
119
+ # generated from extension information in arch definition
120
+ generated enum ExceptionCode;
121
+
122
+ # XLEN encoding, as defined in CSR[mstatus].mxl, etc.
123
+ enum XRegWidth {
124
+ XLEN32 1
125
+ XLEN64 2
126
+ }
127
+
128
+ # enum ExceptionCode {
129
+ # None 0xffff
130
+ # InstructionAddressMisaligned 0
131
+ # InstructionAccessFault 1
132
+ # IllegalInstruction 2
133
+ # Breakpoint 3
134
+ # LoadAddressMisaligned 4
135
+ # LoadAccessFault 5
136
+ # StoreAmoAddressMisaligned 6
137
+ # StoreAmoAccessFault 7
138
+ # Ucall 8
139
+ # Scall 9
140
+ # # reserved 10
141
+ # Mcall 11
142
+ # InstructionPageFault 12
143
+ # LoadPageFault 13
144
+ # # reserved 14
145
+ # StoreAmoPageFault 15
146
+ # # reserved 16-17
147
+ # SoftwareCheck 18
148
+ # HardwareError 19
149
+ # InstructionGuestPageFault 20
150
+ # LoadGuestPageFault 21
151
+ # VirtualInstruction 22
152
+ # StoreAmoGuestPageFault 23
153
+ # }
154
+
155
+ enum SatpMode {
156
+ Bare 0
157
+ Sv32 1
158
+ Sv39 8
159
+ Sv48 9
160
+ Sv57 10
161
+ Reserved 15
162
+ }
163
+
164
+ enum HgatpMode {
165
+ Bare 0
166
+ Sv32x4 1
167
+ Sv39x4 8
168
+ Sv48x4 9
169
+ Sv57x4 10
170
+ Reserved 15
171
+ }
172
+
173
+ bitfield (10) PteFlags {
174
+ RSW 9-8 # reserved
175
+ D 7 # dirty
176
+ A 6 # access
177
+ G 5 # global
178
+ U 4 # userspace permission
179
+ X 3 # execute permission
180
+ W 2 # write permission
181
+ R 1 # read permission
182
+ V 0 # valid
183
+ }
184
+
185
+ struct TranslationResult {
186
+ Bits<PHYS_ADDR_WIDTH> paddr;
187
+ Pbmt pbmt;
188
+ PteFlags pte_flags;
189
+ }
190
+
191
+ struct CachedTranslationResult {
192
+ Boolean valid;
193
+ TranslationResult result;
194
+ }
195
+
196
+ # options associated with a translation (TLB) invalidation
197
+ struct VmaOrderType {
198
+ Boolean global; # include global mappings?
199
+ Boolean smode; # include smode (satp-based) mappings?
200
+ Boolean vsmode; # include vsmode (vsatp-based) mappings?
201
+ Boolean gstage; # include gstage (hgatp-based) mappings?
202
+
203
+ Boolean single_vmid; # Only order a single VMID?
204
+ Bits<14> vmid; # when single_vmid is true, the VMID to order
205
+ Boolean single_asid; # Only order a single ASID?
206
+ Bits<16> asid; # when single_asid is true, the ASID to order
207
+ Boolean single_vaddr; # Only order a single virtual address?
208
+ XReg vaddr; # when single_vaddr is true, the virtual address to order
209
+ Boolean single_gpaddr; # Only order a single guest physical address?
210
+ XReg gpaddr; # when single_gpaddr is true, the guest physical address to order
211
+ }
212
+
213
+ bitfield (64) Sv39PageTableEntry {
214
+ N 63
215
+ PBMT 62-61
216
+ Reserved 60-54
217
+ PPN2 53-28
218
+ PPN1 27-19
219
+ PPN0 18-10
220
+ PPN 53-10 # in addition to the components, we define the entire PPN
221
+ RSW 9-8
222
+ D 7
223
+ A 6
224
+ G 5
225
+ U 4
226
+ X 3
227
+ W 2
228
+ R 1
229
+ V 0
230
+ }
231
+
232
+ PrivilegeMode current_mode = PrivilegeMode::M;
233
+
234
+ function mode {
235
+ returns PrivilegeMode
236
+ description {
237
+ Returns the current active privilege mode.
238
+ }
239
+ body {
240
+ if ((!implemented?(ExtensionName::S)) &&
241
+ (!implemented?(ExtensionName::U)) &&
242
+ (!implemented?(ExtensionName::H))) {
243
+ return PrivilegeMode::M;
244
+ } else {
245
+ return current_mode;
246
+ }
247
+ }
248
+ }
249
+
250
+
251
+ function set_mode_no_refresh {
252
+ arguments PrivilegeMode new_mode
253
+ description {
254
+ Set the current privilege mode to `new_mode`, but don't refresh interrupts
255
+ }
256
+ body {
257
+ if (new_mode != current_mode) {
258
+ notify_mode_change(new_mode, current_mode);
259
+ current_mode = new_mode;
260
+ }
261
+ }
262
+ }
263
+
264
+ function set_mode {
265
+ arguments PrivilegeMode new_mode
266
+ description {
267
+ Set the current privilege mode to `new_mode`
268
+ }
269
+ body {
270
+ if (new_mode != current_mode) {
271
+ notify_mode_change(new_mode, current_mode);
272
+ current_mode = new_mode;
273
+ refresh_pending_interrupts();
274
+ }
275
+ }
276
+ }
277
+
278
+ function compatible_mode? {
279
+ returns Boolean
280
+ arguments
281
+ PrivilegeMode target_mode,
282
+ PrivilegeMode actual_mode
283
+ description {
284
+ Returns true if +target_mode+ is more privileged than +actual_mode+.
285
+ }
286
+ body {
287
+ if (target_mode == PrivilegeMode::M) {
288
+ return actual_mode == PrivilegeMode::M;
289
+ } else if (target_mode == PrivilegeMode::S) {
290
+ return
291
+ (actual_mode == PrivilegeMode::M) ||
292
+ (actual_mode == PrivilegeMode::S);
293
+ } else if (target_mode == PrivilegeMode::U) {
294
+ return
295
+ (actual_mode == PrivilegeMode::M) ||
296
+ (actual_mode == PrivilegeMode::S) ||
297
+ (actual_mode == PrivilegeMode::U);
298
+ } else if (target_mode == PrivilegeMode::VS) {
299
+ return
300
+ (actual_mode == PrivilegeMode::M) ||
301
+ (actual_mode == PrivilegeMode::S) ||
302
+ (actual_mode == PrivilegeMode::VS);
303
+ } else if (target_mode == PrivilegeMode::VU) {
304
+ return
305
+ (actual_mode == PrivilegeMode::M) ||
306
+ (actual_mode == PrivilegeMode::S) ||
307
+ (actual_mode == PrivilegeMode::VS) ||
308
+ (actual_mode == PrivilegeMode::VU);
309
+ }
310
+ }
311
+ }
312
+
313
+ function exception_handling_mode {
314
+ returns PrivilegeMode
315
+ arguments ExceptionCode exception_code
316
+ description {
317
+ Returns the target privilege mode that will handle synchronous exception `exception_code`
318
+ }
319
+ body {
320
+ if (mode() == PrivilegeMode::M) {
321
+ # exceptions can never be taken in a less-privileged mode, so if the current
322
+ # mode is M, the value of medeleg is irrelevant
323
+ return PrivilegeMode::M;
324
+ } else if (implemented?(ExtensionName::S) && ((mode() == PrivilegeMode::HS) || (mode() == PrivilegeMode::U))) {
325
+ if (($bits(CSR[medeleg]) & (MXLEN'1 << $bits(exception_code))) != 0) {
326
+ return PrivilegeMode::HS;
327
+ } else {
328
+ return PrivilegeMode::M;
329
+ }
330
+ } else {
331
+ assert(implemented?(ExtensionName::H) && ((mode() == PrivilegeMode::VS) || (mode() == PrivilegeMode::VU)), "Unexpected mode");
332
+ if (($bits(CSR[medeleg]) & (MXLEN'1 << $bits(exception_code))) != 0) {
333
+ if (($bits(CSR[hedeleg]) & (MXLEN'1 << $bits(exception_code))) != 0) {
334
+ return PrivilegeMode::VS;
335
+ } else {
336
+ return PrivilegeMode::HS;
337
+ }
338
+ } else {
339
+ # if an exception is not delegated to HS-mode, it can't be delegated to VS-mode
340
+ return PrivilegeMode::M;
341
+ }
342
+ }
343
+ }
344
+ }
345
+
346
+ function creg2reg {
347
+ returns Bits<5> # X register index
348
+ arguments Bits<3> creg_idx
349
+ description {
350
+ Maps a C register index (_e.g._, `rs1'` in the specification) to an X register index. From the
351
+ specification:
352
+
353
+ .Registers specified by the three-bit _rs1_&#x2032;, _rs2_&#x2032;, and _rd_&#x2032; fields of the CIW, CL, CS, CA, and CB formats.
354
+ //[cols="20%,10%,10%,10%,10%,10%,10%,10%,10%"]
355
+ [float="center",align="center",cols="1a, 1a",frame="none",grid="none"]
356
+ |===
357
+ |
358
+ [%autowidth,cols="<",frame="none",grid="none",options="noheader"]
359
+ !===
360
+ !RVC Register Number
361
+ !Integer Register Number
362
+ !Integer Register ABI Name
363
+ !Floating-Point Register Number
364
+ !Floating-Point Register ABI Name
365
+ !===
366
+ |
367
+
368
+ [%autowidth,cols="^,^,^,^,^,^,^,^",options="noheader"]
369
+ !===
370
+ !`000` !`001` !`010` !`011` !`100` !`101` !`110` !`111`
371
+ !`x8` !`x9` !`x10` !`x11` !`x12` !`x13` !`x14`!`x15`
372
+ !`s0` !`s1` !`a0` !`a1` !`a2` !`a3` !`a4`!`a5`
373
+ !`f8` !`f9` !`f10` !`f11` !`f12` !`f13`!`f14` !`f15`
374
+ !`fs0` !`fs1` !`fa0` !`fa1` !`fa2` !`fa3` !`fa4` !`fa5`
375
+ !===
376
+ |===
377
+ }
378
+ body {
379
+ return {2'b01, creg_idx};
380
+ }
381
+ }
382
+
383
+ function reserved_instruction {
384
+ arguments Bits<INSTR_ENC_SIZE> encoding
385
+ description {
386
+ Either raises an IllegalInstruction exception or enters unpredictable state,
387
+ depending on the setting of the TRAP_ON_UNIMPLEMENTED_INSTRUCTION parameter.
388
+
389
+ This should be called when an instruction is architecturally defined but
390
+ has been disabled at runtime (_e.g._, by clearing misa.A).
391
+ }
392
+ body {
393
+ if (TRAP_ON_UNIMPLEMENTED_INSTRUCTION) {
394
+ raise(ExceptionCode::IllegalInstruction, mode(), encoding);
395
+ } else {
396
+ unpredictable("Unimplemented instruction that does not trap");
397
+ }
398
+ }
399
+ }
400
+
401
+ function unimplemented_csr {
402
+ arguments Bits<INSTR_ENC_SIZE> encoding
403
+ description {
404
+ Either raises an IllegalInstruction exception or enters unpredictable state,
405
+ depending on the setting of the TRAP_ON_UNIMPLEMENTED_CSR parameter.
406
+ }
407
+ body {
408
+ if (TRAP_ON_UNIMPLEMENTED_CSR) {
409
+ raise(ExceptionCode::IllegalInstruction, mode(), encoding);
410
+ } else {
411
+ unpredictable("Accessing an unimplmented CSR");
412
+ }
413
+ }
414
+ }
415
+
416
+ function mtval_readonly? {
417
+ returns Boolean
418
+ description {
419
+ Returns whether or not CSR[mtval] is read-only based on implementation options
420
+ }
421
+ body {
422
+ return !(
423
+ REPORT_VA_IN_MTVAL_ON_BREAKPOINT ||
424
+ REPORT_VA_IN_MTVAL_ON_LOAD_MISALIGNED ||
425
+ REPORT_VA_IN_MTVAL_ON_STORE_AMO_MISALIGNED ||
426
+ REPORT_VA_IN_MTVAL_ON_INSTRUCTION_MISALIGNED ||
427
+ REPORT_VA_IN_MTVAL_ON_LOAD_ACCESS_FAULT ||
428
+ REPORT_VA_IN_MTVAL_ON_STORE_AMO_ACCESS_FAULT ||
429
+ REPORT_VA_IN_MTVAL_ON_INSTRUCTION_ACCESS_FAULT ||
430
+ REPORT_VA_IN_MTVAL_ON_LOAD_PAGE_FAULT ||
431
+ REPORT_VA_IN_MTVAL_ON_STORE_AMO_PAGE_FAULT ||
432
+ REPORT_VA_IN_MTVAL_ON_INSTRUCTION_PAGE_FAULT ||
433
+ REPORT_ENCODING_IN_MTVAL_ON_ILLEGAL_INSTRUCTION ||
434
+ REPORT_CAUSE_IN_MTVAL_ON_SHADOW_STACK_SOFTWARE_CHECK ||
435
+ REPORT_CAUSE_IN_MTVAL_ON_LANDING_PAD_SOFTWARE_CHECK
436
+ # || implemented?(ExtensionName::Sdext)
437
+ );
438
+ }
439
+ }
440
+
441
+ function stval_readonly? {
442
+ returns Boolean
443
+ description {
444
+ Returns whether or not CSR[stval] is read-only based on implementation options
445
+ }
446
+ body {
447
+ if (implemented?(ExtensionName::S)) {
448
+ return !(
449
+ REPORT_VA_IN_STVAL_ON_BREAKPOINT ||
450
+ REPORT_VA_IN_STVAL_ON_LOAD_MISALIGNED ||
451
+ REPORT_VA_IN_STVAL_ON_STORE_AMO_MISALIGNED ||
452
+ REPORT_VA_IN_STVAL_ON_INSTRUCTION_MISALIGNED ||
453
+ REPORT_VA_IN_STVAL_ON_LOAD_ACCESS_FAULT ||
454
+ REPORT_VA_IN_STVAL_ON_STORE_AMO_ACCESS_FAULT ||
455
+ REPORT_VA_IN_STVAL_ON_INSTRUCTION_ACCESS_FAULT ||
456
+ REPORT_VA_IN_STVAL_ON_LOAD_PAGE_FAULT ||
457
+ REPORT_VA_IN_STVAL_ON_STORE_AMO_PAGE_FAULT ||
458
+ REPORT_VA_IN_STVAL_ON_INSTRUCTION_PAGE_FAULT ||
459
+ REPORT_ENCODING_IN_STVAL_ON_ILLEGAL_INSTRUCTION ||
460
+ REPORT_CAUSE_IN_STVAL_ON_SHADOW_STACK_SOFTWARE_CHECK ||
461
+ REPORT_CAUSE_IN_STVAL_ON_LANDING_PAD_SOFTWARE_CHECK
462
+ # || implemented?(ExtensionName::Sdext)
463
+ );
464
+ } else {
465
+ return true;
466
+ }
467
+ }
468
+ }
469
+
470
+ function vstval_readonly? {
471
+ returns Boolean
472
+ description {
473
+ Returns whether or not CSR[vstval] is read-only based on implementation options
474
+ }
475
+ body {
476
+ if (implemented?(ExtensionName::H)) {
477
+ return !(
478
+ REPORT_VA_IN_VSTVAL_ON_BREAKPOINT ||
479
+ REPORT_VA_IN_VSTVAL_ON_LOAD_MISALIGNED ||
480
+ REPORT_VA_IN_VSTVAL_ON_STORE_AMO_MISALIGNED ||
481
+ REPORT_VA_IN_VSTVAL_ON_INSTRUCTION_MISALIGNED ||
482
+ REPORT_VA_IN_VSTVAL_ON_LOAD_ACCESS_FAULT ||
483
+ REPORT_VA_IN_VSTVAL_ON_STORE_AMO_ACCESS_FAULT ||
484
+ REPORT_VA_IN_VSTVAL_ON_INSTRUCTION_ACCESS_FAULT ||
485
+ REPORT_VA_IN_VSTVAL_ON_LOAD_PAGE_FAULT ||
486
+ REPORT_VA_IN_VSTVAL_ON_STORE_AMO_PAGE_FAULT ||
487
+ REPORT_VA_IN_VSTVAL_ON_INSTRUCTION_PAGE_FAULT ||
488
+ REPORT_ENCODING_IN_VSTVAL_ON_ILLEGAL_INSTRUCTION ||
489
+ REPORT_CAUSE_IN_VSTVAL_ON_SHADOW_STACK_SOFTWARE_CHECK ||
490
+ REPORT_CAUSE_IN_VSTVAL_ON_LANDING_PAD_SOFTWARE_CHECK
491
+ # || implemented?(ExtensionName::Sdext)
492
+ );
493
+ } else {
494
+ return true;
495
+ }
496
+ }
497
+ }
498
+
499
+ function mtval_for {
500
+ returns XReg
501
+ arguments ExceptionCode exception_code, XReg tval
502
+ description {
503
+ Given an exception code and a *legal* non-zero value for mtval,
504
+ returns the value to be written in mtval considering implementation options
505
+ }
506
+ body {
507
+ if (exception_code == ExceptionCode::Breakpoint) {
508
+ return REPORT_VA_IN_MTVAL_ON_BREAKPOINT ? tval : 0;
509
+ } else if (exception_code == ExceptionCode::LoadAddressMisaligned) {
510
+ return REPORT_VA_IN_MTVAL_ON_LOAD_MISALIGNED ? tval : 0;
511
+ } else if (exception_code == ExceptionCode::StoreAmoAddressMisaligned) {
512
+ return REPORT_VA_IN_MTVAL_ON_STORE_AMO_MISALIGNED ? tval : 0;
513
+ } else if (exception_code == ExceptionCode::InstructionAddressMisaligned) {
514
+ return REPORT_VA_IN_MTVAL_ON_INSTRUCTION_MISALIGNED ? tval : 0;
515
+ } else if (exception_code == ExceptionCode::LoadAccessFault) {
516
+ return REPORT_VA_IN_MTVAL_ON_LOAD_ACCESS_FAULT ? tval : 0;
517
+ } else if (exception_code == ExceptionCode::StoreAmoAccessFault) {
518
+ return REPORT_VA_IN_MTVAL_ON_STORE_AMO_ACCESS_FAULT ? tval : 0;
519
+ } else if (exception_code == ExceptionCode::InstructionAccessFault) {
520
+ return REPORT_VA_IN_MTVAL_ON_INSTRUCTION_ACCESS_FAULT ? tval : 0;
521
+ } else if (exception_code == ExceptionCode::LoadPageFault) {
522
+ return REPORT_VA_IN_MTVAL_ON_LOAD_PAGE_FAULT ? tval : 0;
523
+ } else if (exception_code == ExceptionCode::StoreAmoPageFault) {
524
+ return REPORT_VA_IN_MTVAL_ON_STORE_AMO_PAGE_FAULT ? tval : 0;
525
+ } else if (exception_code == ExceptionCode::InstructionPageFault) {
526
+ return REPORT_VA_IN_MTVAL_ON_INSTRUCTION_PAGE_FAULT ? tval : 0;
527
+ } else if (exception_code == ExceptionCode::IllegalInstruction) {
528
+ return REPORT_ENCODING_IN_MTVAL_ON_ILLEGAL_INSTRUCTION ? tval : 0;
529
+ } else if (exception_code == ExceptionCode::SoftwareCheck) {
530
+ # software check options are more fine-grained (per-software-check type), so always use tval,
531
+ # which must be config-checked at the call site
532
+ return tval;
533
+ } else {
534
+ return 0;
535
+ }
536
+ }
537
+ }
538
+
539
+ function stval_for {
540
+ returns XReg
541
+ arguments ExceptionCode exception_code, XReg tval
542
+ description {
543
+ Given an exception code and a *legal* non-zero value for stval,
544
+ returns the value to be written in stval considering implementation options
545
+ }
546
+ body {
547
+ if (exception_code == ExceptionCode::Breakpoint) {
548
+ return REPORT_VA_IN_STVAL_ON_BREAKPOINT ? tval : 0;
549
+ } else if (exception_code == ExceptionCode::LoadAddressMisaligned) {
550
+ return REPORT_VA_IN_STVAL_ON_LOAD_MISALIGNED ? tval : 0;
551
+ } else if (exception_code == ExceptionCode::StoreAmoAddressMisaligned) {
552
+ return REPORT_VA_IN_STVAL_ON_STORE_AMO_MISALIGNED ? tval : 0;
553
+ } else if (exception_code == ExceptionCode::InstructionAddressMisaligned) {
554
+ return REPORT_VA_IN_STVAL_ON_INSTRUCTION_MISALIGNED ? tval : 0;
555
+ } else if (exception_code == ExceptionCode::LoadAccessFault) {
556
+ return REPORT_VA_IN_STVAL_ON_LOAD_ACCESS_FAULT ? tval : 0;
557
+ } else if (exception_code == ExceptionCode::StoreAmoAccessFault) {
558
+ return REPORT_VA_IN_STVAL_ON_STORE_AMO_ACCESS_FAULT ? tval : 0;
559
+ } else if (exception_code == ExceptionCode::InstructionAccessFault) {
560
+ return REPORT_VA_IN_STVAL_ON_INSTRUCTION_ACCESS_FAULT ? tval : 0;
561
+ } else if (exception_code == ExceptionCode::LoadPageFault) {
562
+ return REPORT_VA_IN_STVAL_ON_LOAD_PAGE_FAULT ? tval : 0;
563
+ } else if (exception_code == ExceptionCode::StoreAmoPageFault) {
564
+ return REPORT_VA_IN_STVAL_ON_STORE_AMO_PAGE_FAULT ? tval : 0;
565
+ } else if (exception_code == ExceptionCode::InstructionPageFault) {
566
+ return REPORT_VA_IN_STVAL_ON_INSTRUCTION_PAGE_FAULT ? tval : 0;
567
+ } else if (exception_code == ExceptionCode::IllegalInstruction) {
568
+ return REPORT_ENCODING_IN_STVAL_ON_ILLEGAL_INSTRUCTION ? tval : 0;
569
+ } else if (exception_code == ExceptionCode::SoftwareCheck) {
570
+ # software checks have a fine-grained implementation option (per-software-check type), so always use tval,
571
+ # which must be config-checked at the call site
572
+ return tval;
573
+ } else {
574
+ return 0;
575
+ }
576
+ }
577
+ }
578
+
579
+ function vstval_for {
580
+ returns XReg
581
+ arguments ExceptionCode exception_code, XReg tval
582
+ description {
583
+ Given an exception code and a *legal* non-zero value for vstval,
584
+ returns the value to be written in vstval considering implementation options
585
+ }
586
+ body {
587
+ if (exception_code == ExceptionCode::Breakpoint) {
588
+ return REPORT_VA_IN_VSTVAL_ON_BREAKPOINT ? tval : 0;
589
+ } else if (exception_code == ExceptionCode::LoadAddressMisaligned) {
590
+ return REPORT_VA_IN_VSTVAL_ON_LOAD_MISALIGNED ? tval : 0;
591
+ } else if (exception_code == ExceptionCode::StoreAmoAddressMisaligned) {
592
+ return REPORT_VA_IN_VSTVAL_ON_STORE_AMO_MISALIGNED ? tval : 0;
593
+ } else if (exception_code == ExceptionCode::InstructionAddressMisaligned) {
594
+ return REPORT_VA_IN_VSTVAL_ON_INSTRUCTION_MISALIGNED ? tval : 0;
595
+ } else if (exception_code == ExceptionCode::LoadAccessFault) {
596
+ return REPORT_VA_IN_VSTVAL_ON_LOAD_ACCESS_FAULT ? tval : 0;
597
+ } else if (exception_code == ExceptionCode::StoreAmoAccessFault) {
598
+ return REPORT_VA_IN_VSTVAL_ON_STORE_AMO_ACCESS_FAULT ? tval : 0;
599
+ } else if (exception_code == ExceptionCode::InstructionAccessFault) {
600
+ return REPORT_VA_IN_VSTVAL_ON_INSTRUCTION_ACCESS_FAULT ? tval : 0;
601
+ } else if (exception_code == ExceptionCode::LoadPageFault) {
602
+ return REPORT_VA_IN_VSTVAL_ON_LOAD_PAGE_FAULT ? tval : 0;
603
+ } else if (exception_code == ExceptionCode::StoreAmoPageFault) {
604
+ return REPORT_VA_IN_VSTVAL_ON_STORE_AMO_PAGE_FAULT ? tval : 0;
605
+ } else if (exception_code == ExceptionCode::InstructionPageFault) {
606
+ return REPORT_VA_IN_VSTVAL_ON_INSTRUCTION_PAGE_FAULT ? tval : 0;
607
+ } else if (exception_code == ExceptionCode::IllegalInstruction) {
608
+ return REPORT_ENCODING_IN_VSTVAL_ON_ILLEGAL_INSTRUCTION ? tval : 0;
609
+ } else if (exception_code == ExceptionCode::SoftwareCheck) {
610
+ # software checks have a fine-grained implementation option (per-software-check type), so always use tval,
611
+ # which must be config-checked at the call site
612
+ return tval;
613
+ } else {
614
+ return 0;
615
+ }
616
+ }
617
+ }
618
+
619
+ function raise_guest_page_fault {
620
+ arguments
621
+ MemoryOperation op, # op type
622
+ XReg gpa, # guest physical address
623
+ XReg gva, # guest virtual address
624
+ XReg tinst_value, # value for *tinst
625
+ PrivilegeMode from_mode # effective privilege mode for reporting
626
+ description {
627
+ Raise a guest page fault exception.
628
+ }
629
+ body {
630
+ ExceptionCode code;
631
+ Boolean write_gpa_in_tval; # whether or not to write GPA >> 2 into htval/mtval2
632
+
633
+ if (op == MemoryOperation::Read) {
634
+ code = ExceptionCode::LoadGuestPageFault;
635
+ write_gpa_in_tval = REPORT_GPA_IN_TVAL_ON_LOAD_GUEST_PAGE_FAULT;
636
+ } else if (op == MemoryOperation::Write || op == MemoryOperation::ReadModifyWrite) {
637
+ code = ExceptionCode::StoreAmoGuestPageFault;
638
+ write_gpa_in_tval = REPORT_GPA_IN_TVAL_ON_STORE_AMO_GUEST_PAGE_FAULT;
639
+ } else {
640
+ assert(op == MemoryOperation::Fetch, "unexpected memory operation");
641
+ code = ExceptionCode::InstructionGuestPageFault;
642
+ write_gpa_in_tval = REPORT_GPA_IN_TVAL_ON_INSTRUCTION_GUEST_PAGE_FAULT;
643
+ }
644
+
645
+ PrivilegeMode handling_mode = exception_handling_mode(code);
646
+
647
+ if (handling_mode == PrivilegeMode::S) {
648
+ CSR[htval].VALUE = write_gpa_in_tval ? (gpa >> 2) : 0;
649
+ CSR[htinst].VALUE = tinst_value;
650
+ CSR[sepc].PC = $pc;
651
+ if (!stval_readonly?()) {
652
+ CSR[stval].VALUE = stval_for(code, gva);
653
+ }
654
+ $pc = {CSR[stvec].BASE, 2'b00};
655
+ CSR[scause].INT = 1'b0;
656
+ CSR[scause].CODE = $bits(code);
657
+ CSR[hstatus].GVA = 1;
658
+ CSR[hstatus].SPV = 1; # guest page faults always come from a virtual mode
659
+ CSR[hstatus].SPVP = $bits(from_mode)[0];
660
+ CSR[mstatus].SPP = $bits(from_mode)[0];
661
+ } else {
662
+ assert(handling_mode == PrivilegeMode::M, "unexpected privilege mode");
663
+ CSR[mtval2].VALUE = write_gpa_in_tval ? (gpa >> 2) : 0;
664
+ CSR[mtinst].VALUE = tinst_value;
665
+ CSR[mstatus].MPP = $bits(from_mode)[1:0];
666
+ if (MXLEN == 64) {
667
+ CSR[mstatus].MPV = 1;
668
+ } else {
669
+ CSR[mstatush].MPV = 1;
670
+ }
671
+ }
672
+
673
+ # abort the current instruction, and start to refetch from PC
674
+ set_mode(handling_mode);
675
+ abort_current_instruction();
676
+ }
677
+ }
678
+
679
+ function raise {
680
+ arguments
681
+ ExceptionCode exception_code, # exception code to raise
682
+ PrivilegeMode from_mode, # the effective mode to raise from (may be different than actual current mode)
683
+ XReg tval # value to write into tval
684
+ description {
685
+ Raise synchronous exception number `exception_code`.
686
+
687
+ The exception may be imprecise, and will cause execution to enter an
688
+ unpredictable state, if PRECISE_SYNCHRONOUS_EXCEPTIONS is false.
689
+
690
+ Otherwise, the exception will be precise.
691
+ }
692
+ body {
693
+ if (!PRECISE_SYNCHRONOUS_EXCEPTIONS) {
694
+ unpredictable("Imprecise synchronous exception");
695
+ } else {
696
+ raise_precise(exception_code, from_mode, tval);
697
+ }
698
+ }
699
+ }
700
+
701
+ function raise_precise {
702
+ arguments
703
+ ExceptionCode exception_code, # exception code to raise
704
+ PrivilegeMode from_mode, # the effective mode to raise from (may be different than actual current mode)
705
+ XReg tval # value to write into tval
706
+ description {
707
+ Raise synchronous exception number `exception_code`.
708
+ }
709
+ body {
710
+ PrivilegeMode handling_mode = exception_handling_mode(exception_code);
711
+
712
+ if (handling_mode == PrivilegeMode::M) {
713
+ CSR[mepc].PC = $pc;
714
+ if (!mtval_readonly?()) {
715
+ CSR[mtval].VALUE = mtval_for(exception_code, tval);
716
+ }
717
+ $pc = {CSR[mtvec].BASE, 2'b00};
718
+ CSR[mcause].INT = 1'b0;
719
+ CSR[mcause].CODE = $bits(exception_code);
720
+ if (CSR[misa].H == 1) {
721
+ # write zero into mtval2 and minst
722
+ # (when these are non-zero values, raise_guest_page_fault should be callecd)
723
+ CSR[mtval2].VALUE = 0;
724
+ CSR[mtinst].VALUE = 0;
725
+ if (from_mode == PrivilegeMode::VU || from_mode == PrivilegeMode::VS) {
726
+ if (MXLEN == 32) {
727
+ CSR[mstatush].MPV = 1;
728
+ } else {
729
+ CSR[mstatus].MPV = 1;
730
+ }
731
+ } else {
732
+ if (MXLEN == 32) {
733
+ CSR[mstatush].MPV = 0;
734
+ } else {
735
+ CSR[mstatus].MPV = 0;
736
+ }
737
+ }
738
+ }
739
+ CSR[mstatus].MPP = $bits(from_mode);
740
+ } else if (CSR[misa].S == 1 && (handling_mode == PrivilegeMode::S)) {
741
+ CSR[sepc].PC = $pc;
742
+ if (!stval_readonly?()) {
743
+ CSR[stval].VALUE = stval_for(exception_code, tval);
744
+ }
745
+ $pc = {CSR[stvec].BASE, 2'b00};
746
+ CSR[scause].INT = 1'b0;
747
+ CSR[scause].CODE = $bits(exception_code);
748
+ CSR[mstatus].SPP = $bits(from_mode)[0];
749
+ if (CSR[misa].H == 1) {
750
+ # write zero into htval and hinst
751
+ # (when these are non-zero values, raise_guest_page_fault should be callecd)
752
+ CSR[htval].VALUE = 0;
753
+ CSR[htinst].VALUE = 0;
754
+ CSR[hstatus].SPV = $bits(from_mode)[2];
755
+ if (from_mode == PrivilegeMode::VU || from_mode == PrivilegeMode::VS) {
756
+ CSR[hstatus].SPV = 1;
757
+ if ( ((exception_code == ExceptionCode::Breakpoint) && (REPORT_VA_IN_STVAL_ON_BREAKPOINT))
758
+ || ((exception_code == ExceptionCode::LoadAddressMisaligned) && (REPORT_VA_IN_STVAL_ON_LOAD_MISALIGNED))
759
+ || ((exception_code == ExceptionCode::StoreAmoAddressMisaligned) && (REPORT_VA_IN_STVAL_ON_STORE_AMO_MISALIGNED))
760
+ || ((exception_code == ExceptionCode::InstructionAddressMisaligned) && (REPORT_VA_IN_STVAL_ON_INSTRUCTION_MISALIGNED))
761
+ || ((exception_code == ExceptionCode::LoadAccessFault) && (REPORT_VA_IN_STVAL_ON_LOAD_ACCESS_FAULT))
762
+ || ((exception_code == ExceptionCode::StoreAmoAccessFault) && (REPORT_VA_IN_STVAL_ON_STORE_AMO_ACCESS_FAULT))
763
+ || ((exception_code == ExceptionCode::InstructionAccessFault) && (REPORT_VA_IN_STVAL_ON_INSTRUCTION_ACCESS_FAULT))
764
+ || ((exception_code == ExceptionCode::LoadPageFault) && (REPORT_VA_IN_STVAL_ON_LOAD_PAGE_FAULT))
765
+ || ((exception_code == ExceptionCode::StoreAmoPageFault) && (REPORT_VA_IN_STVAL_ON_STORE_AMO_PAGE_FAULT))
766
+ || ((exception_code == ExceptionCode::InstructionPageFault) && (REPORT_VA_IN_STVAL_ON_INSTRUCTION_PAGE_FAULT))) {
767
+ # note: guest page faults handled through raise_guest_page_fault
768
+ CSR[hstatus].GVA = 1;
769
+ } else {
770
+ CSR[hstatus].GVA = 0;
771
+ }
772
+ CSR[hstatus].SPVP = $bits(from_mode)[0];
773
+ } else {
774
+ CSR[hstatus].SPV = 0;
775
+ CSR[hstatus].GVA = 0;
776
+ }
777
+ }
778
+ } else if (CSR[misa].H == 1 && (handling_mode == PrivilegeMode::VS)) {
779
+ CSR[vsepc].PC = $pc;
780
+ if (!vstval_readonly?()) {
781
+ CSR[vstval].VALUE = vstval_for(exception_code, tval);
782
+ }
783
+ $pc = {CSR[vstvec].BASE, 2'b00};
784
+ CSR[vscause].INT = 1'b0;
785
+ CSR[vscause].CODE = $bits(exception_code);
786
+ CSR[vsstatus].SPP = $bits(from_mode)[0];
787
+ }
788
+
789
+ # abort the current instruction, and start to refetch from PC
790
+ set_mode(handling_mode);
791
+ abort_current_instruction();
792
+ }
793
+ }
794
+
795
+ function ialign {
796
+ returns Bits<6>
797
+ description {
798
+ Returns IALIGN, the smallest instruction encoding size, in bits.
799
+ }
800
+ body {
801
+ if (implemented?(ExtensionName::C) && (CSR[misa].C == 0x1)) {
802
+ return 16;
803
+ } else {
804
+ return 32;
805
+ }
806
+ }
807
+ }
808
+
809
+ function jump {
810
+ arguments XReg target_addr
811
+ description {
812
+ Jump to virtual address `target_addr`.
813
+
814
+ If target address is misaligned, raise a `MisalignedAddress` exception.
815
+ }
816
+ body {
817
+ # raise a misaligned exception if address is not aligned to IALIGN
818
+ if ((ialign() == 16) && ((target_addr & 0x1) != 0)) {
819
+ # the target PC is not halfword-aligned
820
+ raise(ExceptionCode::InstructionAddressMisaligned, mode(), target_addr);
821
+ } else if ((ialign() == 32) && (target_addr & 0x3) != 0) {
822
+ # the target PC is not word-aligned
823
+ raise(ExceptionCode::InstructionAddressMisaligned, mode(), target_addr);
824
+ }
825
+
826
+ $pc = target_addr;
827
+ }
828
+ }
829
+
830
+ function jump_halfword {
831
+ arguments XReg target_hw_addr
832
+ description {
833
+ Jump to virtual halfword address `target_hw_addr`.
834
+
835
+ If target address is misaligned, raise a `MisalignedAddress` exception.
836
+ }
837
+ body {
838
+ # ensure that the target address is really a halfword address
839
+ assert((target_hw_addr & 0x1) == 0x0, "Expected halfword-aligned address in jump_halfword");
840
+
841
+ if (ialign() != 16) {
842
+ if ((target_hw_addr & 0x3) != 0) {
843
+ # the target PC is not word-aligned
844
+ raise(ExceptionCode::InstructionAddressMisaligned, mode(), target_hw_addr);
845
+ }
846
+ }
847
+
848
+ $pc = target_hw_addr;
849
+ }
850
+ }
851
+
852
+ function valid_interrupt_code? {
853
+ returns Boolean
854
+ arguments XReg code
855
+ description {
856
+ Returns true if _code_ is a legal interrupt number.
857
+ }
858
+ body {
859
+ if (code > ((1 `<< $enum_element_size(InterruptCode)) - 1)) {
860
+ # code is too large
861
+ return false;
862
+ }
863
+ if ($array_includes?($enum_to_a(InterruptCode), code)) {
864
+ return true;
865
+ } else {
866
+ return false;
867
+ }
868
+ }
869
+ }
870
+
871
+ function valid_exception_code? {
872
+ returns Boolean
873
+ arguments XReg code
874
+ description {
875
+ Returns true if _code_ is a legal exception number.
876
+ }
877
+ body {
878
+ if (code > ((1 `<< $enum_element_size(ExceptionCode)) - 1)) {
879
+ # code is too large
880
+ return false;
881
+ }
882
+ if ($array_includes?($enum_to_a(ExceptionCode), code)) {
883
+ return true;
884
+ } else {
885
+ return false;
886
+ }
887
+ }
888
+ }
889
+
890
+ function xlen {
891
+ returns Bits<8>
892
+ description {
893
+ Returns the effective XLEN for the current privilege mode.
894
+ }
895
+ body {
896
+ if (MXLEN == 32) {
897
+ return 32;
898
+ } else {
899
+ if (mode() == PrivilegeMode::M) {
900
+ if (CSR[misa].MXL == $bits(XRegWidth::XLEN32)) {
901
+ return 32;
902
+ } else if (CSR[misa].MXL == $bits(XRegWidth::XLEN64)) {
903
+ return 64;
904
+ } else {
905
+ unreachable();
906
+ }
907
+ } else if (implemented?(ExtensionName::S) && mode() == PrivilegeMode::S) {
908
+ if (CSR[mstatus].SXL == $bits(XRegWidth::XLEN32)) {
909
+ return 32;
910
+ } else if (CSR[mstatus].SXL == $bits(XRegWidth::XLEN64)) {
911
+ return 64;
912
+ } else {
913
+ unreachable();
914
+ }
915
+ } else if (implemented?(ExtensionName::U) && mode() == PrivilegeMode::U) {
916
+ if (CSR[mstatus].UXL == $bits(XRegWidth::XLEN32)) {
917
+ return 32;
918
+ } else if (CSR[mstatus].UXL == $bits(XRegWidth::XLEN64)) {
919
+ return 64;
920
+ } else {
921
+ unreachable();
922
+ }
923
+ } else if (implemented?(ExtensionName::H) && mode() == PrivilegeMode::VS) {
924
+ if (CSR[hstatus].VSXL == $bits(XRegWidth::XLEN32)) {
925
+ return 32;
926
+ } else if (CSR[hstatus].VSXL == $bits(XRegWidth::XLEN64)) {
927
+ return 64;
928
+ } else {
929
+ unreachable();
930
+ }
931
+ } else if (implemented?(ExtensionName::H) && mode() == PrivilegeMode::VU) {
932
+ if (CSR[vsstatus].UXL == $bits(XRegWidth::XLEN32)) {
933
+ return 32;
934
+ } else if (CSR[vsstatus].UXL == $bits(XRegWidth::XLEN64)) {
935
+ return 64;
936
+ } else {
937
+ unreachable();
938
+ }
939
+ }
940
+ }
941
+ }
942
+ }
943
+
944
+ function virtual_mode? {
945
+ returns Boolean
946
+ description {
947
+ Returns True if the current mode is virtual (VS or VU).
948
+ }
949
+ body {
950
+ return (mode() == PrivilegeMode::VS) || (mode() == PrivilegeMode::VU);
951
+ }
952
+ }
953
+
954
+ function mask_eaddr {
955
+ returns XReg
956
+ arguments XReg eaddr
957
+ description {
958
+ Mask upper N bits of an effective address if pointer masking is enabled
959
+ }
960
+ body {
961
+ #if (implemented?(ExtensionName::Zjpm)) {
962
+ # if (mode() == PrivilegeMode::M) {
963
+ # if (CSR[mpm].menable) {
964
+ # # ignore upper mbits of effective address
965
+ # return sext(xlen() - CSR[mpm].mbits, eaddr);
966
+ # }
967
+ # } else if (mode() == PrivilegeMode::S) { # also applies to HS mode
968
+ # if (CSR[spm].senable) {
969
+ # # ignore upper sbits of effective address
970
+ # return sext(xlen() - CSR[spm].sbits, eaddr);
971
+ # }
972
+ # } else if (mode() == PrivilegeMode::U || mode() == PrivilegeMode::VU) {
973
+ # if (CSR[upm].uenable) {
974
+ # # ignore upper ubits of effective address
975
+ # return sext(xlen() - CSR[upm].ubits, eaddr);
976
+ # }
977
+ # }
978
+ #}
979
+
980
+ # by default, eaddr == vaddr
981
+ return eaddr;
982
+ }
983
+ }
984
+
985
+
986
+ bitfield (8) PmpCfg {
987
+ L 7
988
+ Rsvd 6-5
989
+ A 4-3
990
+ X 2
991
+ W 1
992
+ R 0
993
+ }
994
+
995
+ enum PmpCfg_A {
996
+ OFF 0
997
+ TOR 1
998
+ NA4 2
999
+ NAPOT 3
1000
+ }
1001
+
1002
+ enum PmpMatchResult {
1003
+ NoMatch 0
1004
+ FullMatch 1
1005
+ PartialMatch 2
1006
+ }
1007
+
1008
+ function pmp_match_64 {
1009
+ returns PmpMatchResult, PmpCfg
1010
+ arguments Bits<PHYS_ADDR_WIDTH> paddr, U32 access_size
1011
+ description {
1012
+ Given a physical address, see if any PMP entry matches.
1013
+
1014
+ If there is a complete match, return the PmpCfg that guards the region.
1015
+ If there is no match or a partial match, report that result.
1016
+ }
1017
+ body {
1018
+ Bits<12> pmpcfg0_addr = 0x3a0;
1019
+ Bits<12> pmpaddr0_addr = 0x3b0;
1020
+
1021
+ for (U32 i=0; i<NUM_PMP_ENTRIES; i++) {
1022
+ # get the registers for this PMP entry
1023
+ Bits<12> pmpcfg_idx = pmpcfg0_addr + (i/8)*2;
1024
+ Bits<6> shamt = (i % 8)*8;
1025
+
1026
+ Csr pmpcfg_csr = direct_csr_lookup(pmpcfg_idx);
1027
+ PmpCfg cfg = (csr_hw_read(pmpcfg_csr) >> shamt)[7:0];
1028
+
1029
+ Bits<12> pmpaddr_idx = pmpaddr0_addr + i;
1030
+ Csr pmpaddr_csr = direct_csr_lookup(pmpaddr_idx);
1031
+ Bits<64> pmpaddr_csr_value = csr_sw_read(pmpaddr_csr);
1032
+
1033
+ # set up the default range limits, which will result in NoMatch when
1034
+ # compared to the access
1035
+ Bits<PHYS_ADDR_WIDTH> range_base = 0;
1036
+ Bits<PHYS_ADDR_WIDTH> range_limit = 0;
1037
+
1038
+ if (cfg.A == $bits(PmpCfg_A::TOR)) {
1039
+ if (i == 0) {
1040
+ # when entry zero is TOR, zero is the lower address bound
1041
+ range_base = 0;
1042
+ } else {
1043
+ # otherwise, it's the address in the next lowest pmpaddr register
1044
+ Csr tor_pmpaddr_csr = direct_csr_lookup(pmpaddr_idx - 1);
1045
+ range_base = (csr_sw_read(tor_pmpaddr_csr))[PHYS_ADDR_WIDTH-1:0];
1046
+ }
1047
+ range_limit = (pmpaddr_csr_value)[PHYS_ADDR_WIDTH-1:0] - 1;
1048
+
1049
+ } else if (cfg.A == $bits(PmpCfg_A::NAPOT)) {
1050
+ # Example pmpaddr: 0b00010101111
1051
+ # ^--- last 0 dictates region size & alignment
1052
+ # pmpaddr + 1: 0b00010110000
1053
+ # mask: 0b00000011111
1054
+ # ~mask: 0b11111100000
1055
+ # len = mask + 1: 0b00000100000
1056
+ Bits<PHYS_ADDR_WIDTH-1> pmpaddr_value = pmpaddr_csr_value[PHYS_ADDR_WIDTH-1:0];
1057
+ Bits<PHYS_ADDR_WIDTH-1> mask = pmpaddr_value ^ (pmpaddr_value + 1);
1058
+ range_base = (pmpaddr_value & ~mask);
1059
+ range_limit = range_base + mask;
1060
+
1061
+ } else if (cfg.A == $bits(PmpCfg_A::NA4)) {
1062
+ range_base = pmpaddr_csr_value[PHYS_ADDR_WIDTH-1:0];
1063
+ range_limit = range_base + 3;
1064
+ }
1065
+
1066
+ if (((paddr >> 2) >= range_base) && (((paddr + (access_size/8) - 1) >> 2) <= range_limit)) {
1067
+ # full match
1068
+ return PmpMatchResult::FullMatch, cfg;
1069
+ } else if (!(((paddr + (access_size/8) - 1) < range_base) || (paddr >= range_limit))) {
1070
+ # this is a partial match. By definition, the access must fail, regardless
1071
+ # of the pmp cfg settings
1072
+ return PmpMatchResult::PartialMatch, -;
1073
+ }
1074
+ }
1075
+ # fall-through: there was no match
1076
+ return PmpMatchResult::NoMatch, -;
1077
+ }
1078
+ }
1079
+
1080
+ function pmp_match_32 {
1081
+ returns PmpMatchResult, PmpCfg
1082
+ arguments Bits<PHYS_ADDR_WIDTH> paddr, U32 access_size
1083
+ description {
1084
+ Given a physical address, see if any PMP entry matches.
1085
+
1086
+ If there is a complete match, return the PmpCfg that guards the region.
1087
+ If there is no match or a partial match, report that result.
1088
+ }
1089
+ body {
1090
+ Bits<12> pmpcfg0_addr = 0x3a0;
1091
+ Bits<12> pmpaddr0_addr = 0x3b0;
1092
+
1093
+ for (U32 i=0; i<NUM_PMP_ENTRIES; i++) {
1094
+ # get the registers for this PMP entry
1095
+ Bits<12> pmpcfg_idx = pmpcfg0_addr + (i/4);
1096
+ Bits<6> shamt = (i % 4)*8;
1097
+
1098
+ Csr pmpcfg_csr = direct_csr_lookup(pmpcfg_idx);
1099
+ PmpCfg cfg = (csr_hw_read(pmpcfg_csr) >> shamt)[7:0];
1100
+
1101
+ Bits<12> pmpaddr_idx = pmpaddr0_addr + i;
1102
+ Csr pmpaddr_csr = direct_csr_lookup(pmpaddr_idx);
1103
+ Bits<32> pmpaddr_csr_value = csr_sw_read(pmpaddr_csr);
1104
+
1105
+ # set up the default range limits, which will result in NoMatch when
1106
+ # compared to the access
1107
+ Bits<PHYS_ADDR_WIDTH> range_base = 0;
1108
+ Bits<PHYS_ADDR_WIDTH> range_limit = 0;
1109
+
1110
+ if (cfg.A == $bits(PmpCfg_A::TOR)) {
1111
+ if (i == 0) {
1112
+ # when entry zero is TOR, zero is the lower address bound
1113
+ range_base = 0;
1114
+ } else {
1115
+ # otherwise, it's the address in the next lowest pmpaddr register
1116
+ Csr tor_pmpaddr_csr = direct_csr_lookup(pmpaddr_idx - 1);
1117
+ range_base = csr_sw_read(tor_pmpaddr_csr)[PHYS_ADDR_WIDTH-1:0];
1118
+ }
1119
+ range_limit = (pmpaddr_csr_value)[PHYS_ADDR_WIDTH-1:0] - 1;
1120
+
1121
+ } else if (cfg.A == $bits(PmpCfg_A::NAPOT)) {
1122
+ # Example pmpaddr: 0b00010101111
1123
+ # ^--- last 0 dictates region size & alignment
1124
+ # pmpaddr + 1: 0b00010110000
1125
+ # mask: 0b00000011111
1126
+ # ~mask: 0b11111100000
1127
+ # len = mask + 1: 0b00000100000
1128
+ Bits<PHYS_ADDR_WIDTH-1> pmpaddr_value = pmpaddr_csr_value[PHYS_ADDR_WIDTH-3:0];
1129
+ Bits<PHYS_ADDR_WIDTH-1> mask = pmpaddr_value ^ (pmpaddr_value + 1);
1130
+ range_base = pmpaddr_value & ~mask;
1131
+ range_limit = range_base + mask;
1132
+
1133
+ } else if (cfg.A == $bits(PmpCfg_A::NA4)) {
1134
+ range_base = pmpaddr_csr_value[PHYS_ADDR_WIDTH-1:0];
1135
+ range_limit = range_base + 3;
1136
+ }
1137
+
1138
+ if (((paddr >> 2) >= range_base) && (((paddr + (access_size/8) - 1) >> 2) <= range_limit)) {
1139
+ # full match
1140
+ return PmpMatchResult::FullMatch, cfg;
1141
+ } else if (!(((paddr + (access_size/8) - 1) < range_base) || (paddr >= range_limit))) {
1142
+ # this is a partial match. By definition, the access must fail, regardless
1143
+ # of the pmp cfg settings
1144
+ return PmpMatchResult::PartialMatch, -;
1145
+ }
1146
+ }
1147
+ # fall-through: there was no match
1148
+ return PmpMatchResult::NoMatch, -;
1149
+ }
1150
+ }
1151
+
1152
+ function pmp_match {
1153
+ returns PmpMatchResult, PmpCfg
1154
+ arguments Bits<PHYS_ADDR_WIDTH> paddr, U32 access_size
1155
+ description {
1156
+ Given a physical address, see if any PMP entry matches.
1157
+
1158
+ If there is a complete match, return the PmpCfg that guards the region.
1159
+ If there is no match or a partial match, report that result.
1160
+ }
1161
+ body {
1162
+ if (MXLEN == 64) {
1163
+ return pmp_match_64(paddr, access_size);
1164
+ } else {
1165
+ return pmp_match_32(paddr, access_size);
1166
+ }
1167
+ }
1168
+ }
1169
+
1170
+ function mpv {
1171
+ returns Bits<1>
1172
+ description {
1173
+ Returns the current value of CSR[mstatus].MPV (when MXLEN == 64) of CSR[mstatush].MPV (when MXLEN == 32)
1174
+ }
1175
+ body {
1176
+ if (implemented?(ExtensionName::H)) {
1177
+ return (MXLEN == 32) ? CSR[mstatush].MPV : CSR[mstatus].MPV;
1178
+ } else {
1179
+ assert(false, "TODO");
1180
+ }
1181
+ }
1182
+ }
1183
+
1184
+
1185
+ function effective_ldst_mode {
1186
+ returns PrivilegeMode
1187
+ description {
1188
+ Returns the effective privilege mode for normal explicit loads and stores, taking into account
1189
+ the current actual privilege mode and modifications from `mstatus.MPRV`.
1190
+ }
1191
+ body {
1192
+ # when the mode is M, loads and stores can be executed as if they were done from any other mode
1193
+ # with the use of mstatus.MPRV
1194
+ if (mode() == PrivilegeMode::M) {
1195
+ if (CSR[misa].U == 1 && CSR[mstatus].MPRV == 1) {
1196
+ if (CSR[mstatus].MPP == 0b00) {
1197
+ if (CSR[misa].H == 1 && mpv() == 0b1) {
1198
+ return PrivilegeMode::VU;
1199
+ } else {
1200
+ return PrivilegeMode::U;
1201
+ }
1202
+ } else if (CSR[misa].S == 1 && CSR[mstatus].MPP == 0b01) {
1203
+ if (CSR[misa].H == 1 && mpv() == 0b1) {
1204
+ return PrivilegeMode::VS;
1205
+ } else {
1206
+ return PrivilegeMode::S;
1207
+ }
1208
+ }
1209
+ }
1210
+ }
1211
+
1212
+ # no modifiers were found, return actual mode
1213
+ return mode();
1214
+ }
1215
+ }
1216
+
1217
+
1218
+ function pmp_check {
1219
+ returns Boolean
1220
+ arguments Bits<PHYS_ADDR_WIDTH> paddr, U32 access_size, MemoryOperation type
1221
+ description {
1222
+ Given a physical address and operation type, return whether or not the access is allowed by PMP.
1223
+ }
1224
+ body {
1225
+ PrivilegeMode mode = effective_ldst_mode();
1226
+ PmpMatchResult match_result;
1227
+ PmpCfg cfg;
1228
+
1229
+ (match_result, cfg) = pmp_match(paddr, access_size);
1230
+
1231
+ if (match_result == PmpMatchResult::FullMatch) {
1232
+ if (mode == PrivilegeMode::M && (cfg.L == 0)) {
1233
+ # when the region is not locked, all M-mode access pass
1234
+ return true;
1235
+ }
1236
+
1237
+ # this is either an HS, VS, VU, or U mode access, or an M mode access with cfg.L set
1238
+ # the RWX settings in cfg apply
1239
+ if (type == MemoryOperation::Write && (cfg.W == 0)) {
1240
+ return false;
1241
+ } else if (type == MemoryOperation::Read && (cfg.R == 0)) {
1242
+ return false;
1243
+ } else if (type == MemoryOperation::Fetch && (cfg.X == 0)) {
1244
+ return false;
1245
+ }
1246
+ } else if (match_result == PmpMatchResult::NoMatch) {
1247
+ # with no matched, M-mode passes and everything else fails
1248
+ if (mode == PrivilegeMode::M) {
1249
+ return true;
1250
+ } else {
1251
+ return false;
1252
+ }
1253
+ } else {
1254
+ assert(match_result == PmpMatchResult::PartialMatch, "PMP matching logic error");
1255
+
1256
+ # by definition, any partial match fails the access, regardless of the config settings
1257
+ return false;
1258
+ }
1259
+
1260
+ # fall-through passes
1261
+ return true;
1262
+ }
1263
+ }
1264
+
1265
+ function access_check {
1266
+ arguments
1267
+ Bits<PHYS_ADDR_WIDTH> paddr,
1268
+ U32 access_size,
1269
+ XReg vaddr,
1270
+ MemoryOperation type,
1271
+ ExceptionCode fault_type,
1272
+ PrivilegeMode from_mode
1273
+ description {
1274
+ Checks if the physical address paddr is able to access memory, and raises
1275
+ the appropriate exception if not.
1276
+ }
1277
+ body {
1278
+ # check if this is a valid physical address
1279
+ if (paddr > ((1 `<< PHYS_ADDR_WIDTH) - access_size)) {
1280
+ raise(fault_type, from_mode, vaddr);
1281
+ }
1282
+
1283
+ # check PMP
1284
+ if (implemented?(ExtensionName::Smpmp)) {
1285
+ if (!pmp_check(paddr[PHYS_ADDR_WIDTH-1:0], access_size, type)) {
1286
+ raise(fault_type, from_mode, vaddr);
1287
+ }
1288
+ }
1289
+ }
1290
+ }
1291
+
1292
+ function base32? {
1293
+ returns Boolean
1294
+ description {
1295
+ return True iff current effective XLEN == 32
1296
+ }
1297
+ body {
1298
+ if (MXLEN == 32) {
1299
+ return true;
1300
+ } else {
1301
+ XRegWidth xlen32 = XRegWidth::XLEN32;
1302
+ if (mode() == PrivilegeMode::M) {
1303
+ return CSR[misa].MXL == $bits(xlen32);
1304
+ } else if (implemented?(ExtensionName::S) && mode() == PrivilegeMode::S) {
1305
+ return CSR[mstatus].SXL == $bits(xlen32);
1306
+ } else if (implemented?(ExtensionName::U) && mode() == PrivilegeMode::U) {
1307
+ return CSR[mstatus].UXL == $bits(xlen32);
1308
+ } else if (implemented?(ExtensionName::H) && mode() == PrivilegeMode::VS) {
1309
+ return CSR[hstatus].VSXL == $bits(xlen32);
1310
+ } else {
1311
+ assert(implemented?(ExtensionName::H) && mode() == PrivilegeMode::VU, "Unexpected mode");
1312
+ return CSR[vsstatus].UXL == $bits(xlen32);
1313
+ }
1314
+ }
1315
+ }
1316
+ }
1317
+
1318
+ function base64? {
1319
+ returns Boolean
1320
+ description {
1321
+ return True iff current effective XLEN == 64
1322
+ }
1323
+ body {
1324
+ return xlen() == 64;
1325
+ }
1326
+ }
1327
+
1328
+ function current_translation_mode {
1329
+ returns SatpMode
1330
+ arguments
1331
+ PrivilegeMode mode
1332
+ description {
1333
+ Returns the current first-stage translation mode for an explicit load or store
1334
+ from +mode+ given the machine state (e.g., value of `satp` or `vsatp` csr).
1335
+
1336
+ Returns SatpMode::Reserved if the setting found in `satp` or `vsatp` is invalid.
1337
+ }
1338
+ body {
1339
+ PrivilegeMode effective_mode = effective_ldst_mode();
1340
+
1341
+ if (effective_mode == PrivilegeMode::M) {
1342
+ return SatpMode::Bare;
1343
+ }
1344
+
1345
+ if (CSR[misa].H == 1'b1) {
1346
+ if (effective_mode == PrivilegeMode::VS || effective_mode == PrivilegeMode::VU) {
1347
+ Bits<4> mode_val = CSR[vsatp].MODE;
1348
+ if (mode_val == $bits(SatpMode::Bare)) {
1349
+ return SatpMode::Bare;
1350
+ } else if (mode_val == $bits(SatpMode::Sv32)) {
1351
+ # Sv32 is only defined when XLEN == 32
1352
+ if (MXLEN == 64) {
1353
+ if ((effective_mode == PrivilegeMode::VS) && (CSR[hstatus].VSXL != $bits(XRegWidth::XLEN32))) {
1354
+ # not supported in this XLEN
1355
+ return SatpMode::Reserved;
1356
+ }
1357
+ if ((effective_mode == PrivilegeMode::VU) && (CSR[vsstatus].UXL != $bits(XRegWidth::XLEN32))) {
1358
+ # not supported in this XLEN
1359
+ return SatpMode::Reserved;
1360
+ }
1361
+ }
1362
+ if (!SV32_VSMODE_TRANSLATION) {
1363
+ # not supported in this configuration
1364
+ return SatpMode::Reserved;
1365
+ }
1366
+
1367
+ # OK
1368
+ return SatpMode::Sv32;
1369
+ } else if ((MXLEN == 64) && (mode_val == $bits(SatpMode::Sv39))) {
1370
+ # Sv39 is only defined when XLEN == 64
1371
+ if (effective_mode == PrivilegeMode::VS && CSR[hstatus].VSXL != $bits(XRegWidth::XLEN64)) {
1372
+ # not supported in this XLEN
1373
+ return SatpMode::Reserved;
1374
+ }
1375
+ if (effective_mode == PrivilegeMode::VU && CSR[vsstatus].UXL != $bits(XRegWidth::XLEN64)) {
1376
+ # not supported in this XLEN
1377
+ return SatpMode::Reserved;
1378
+ }
1379
+ if (!SV39_VSMODE_TRANSLATION) {
1380
+ # not supported in this configuration
1381
+ return SatpMode::Reserved;
1382
+ }
1383
+
1384
+ # OK
1385
+ return SatpMode::Sv39;
1386
+ } else if ((MXLEN == 64) && (mode_val == $bits(SatpMode::Sv48))) {
1387
+ # Sv48 is only defined when XLEN == 64
1388
+ if (effective_mode == PrivilegeMode::VS && CSR[hstatus].VSXL != $bits(XRegWidth::XLEN64)) {
1389
+ # not supported in this XLEN
1390
+ return SatpMode::Reserved;
1391
+ }
1392
+ if (effective_mode == PrivilegeMode::VU && CSR[vsstatus].UXL != $bits(XRegWidth::XLEN64)) {
1393
+ # not supported in this XLEN
1394
+ return SatpMode::Reserved;
1395
+ }
1396
+ if (!SV48_VSMODE_TRANSLATION) {
1397
+ # not supported in this configuration
1398
+ return SatpMode::Reserved;
1399
+ }
1400
+
1401
+ # OK
1402
+ return SatpMode::Sv48;
1403
+ } else if ((MXLEN == 64) && (mode_val == $bits(SatpMode::Sv57))) {
1404
+ # Sv57 is only defined when XLEN == 64
1405
+ if (effective_mode == PrivilegeMode::VS && CSR[hstatus].VSXL != $bits(XRegWidth::XLEN64)) {
1406
+ # not supported in this XLEN
1407
+ return SatpMode::Reserved;
1408
+ }
1409
+ if (effective_mode == PrivilegeMode::VU && CSR[vsstatus].UXL != $bits(XRegWidth::XLEN64)) {
1410
+ # not supported in this XLEN
1411
+ return SatpMode::Reserved;
1412
+ }
1413
+ if (!SV57_VSMODE_TRANSLATION) {
1414
+ # not supported in this configuration
1415
+ return SatpMode::Reserved;
1416
+ }
1417
+
1418
+ # OK
1419
+ return SatpMode::Sv57;
1420
+ } else {
1421
+ return SatpMode::Reserved;
1422
+ }
1423
+ } else {
1424
+ return SatpMode::Reserved;
1425
+ }
1426
+ } else if (CSR[misa].S == 1'b1) {
1427
+
1428
+ # if we reach here, then the effective mode is S or U
1429
+ assert(effective_mode == PrivilegeMode::S || effective_mode == PrivilegeMode::U, "unexpected priv mode");
1430
+ Bits<4> mode_val = CSR[satp].MODE;
1431
+ if (mode_val == $bits(SatpMode::Bare)) {
1432
+ return SatpMode::Bare;
1433
+ } else if (mode_val == $bits(SatpMode::Sv32)) {
1434
+ # Sv32 is only defined when XLEN == 32
1435
+ if (MXLEN == 64) {
1436
+ if (effective_mode == PrivilegeMode::S && CSR[mstatus].SXL != $bits(XRegWidth::XLEN32)) {
1437
+ # not supported in this XLEN
1438
+ return SatpMode::Reserved;
1439
+ }
1440
+ if (effective_mode == PrivilegeMode::U && CSR[sstatus].UXL != $bits(XRegWidth::XLEN32)) {
1441
+ # not supported in this XLEN
1442
+ return SatpMode::Reserved;
1443
+ }
1444
+ }
1445
+ if (!implemented?(ExtensionName::Sv32)) {
1446
+ # not supported in this configuration
1447
+ return SatpMode::Reserved;
1448
+ }
1449
+ # OK
1450
+ return SatpMode::Sv32;
1451
+ } else if ((MXLEN == 64) && (mode_val == $bits(SatpMode::Sv39))) {
1452
+ # Sv39 is only defined when XLEN == 64
1453
+ if (effective_mode == PrivilegeMode::S && CSR[mstatus].SXL != $bits(XRegWidth::XLEN64)) {
1454
+ # not supported in this XLEN
1455
+ return SatpMode::Reserved;
1456
+ }
1457
+ if (effective_mode == PrivilegeMode::U && CSR[sstatus].UXL != $bits(XRegWidth::XLEN64)) {
1458
+ # not supported in this XLEN
1459
+ return SatpMode::Reserved;
1460
+ }
1461
+ if (!implemented?(ExtensionName::Sv39)) {
1462
+ # not supported in this configuration
1463
+ return SatpMode::Reserved;
1464
+ }
1465
+ # OK
1466
+ return SatpMode::Sv39;
1467
+ } else if ((MXLEN == 64) && (mode_val == $bits(SatpMode::Sv48))) {
1468
+ # Sv48 is only defined when XLEN == 64
1469
+ if (effective_mode == PrivilegeMode::S && CSR[mstatus].SXL != $bits(XRegWidth::XLEN64)) {
1470
+ # not supported in this XLEN
1471
+ return SatpMode::Reserved;
1472
+ }
1473
+ if (effective_mode == PrivilegeMode::U && CSR[sstatus].UXL != $bits(XRegWidth::XLEN64)) {
1474
+ # not supported in this XLEN
1475
+ return SatpMode::Reserved;
1476
+ }
1477
+ if (!implemented?(ExtensionName::Sv48)) {
1478
+ # not supported in this configuration
1479
+ return SatpMode::Reserved;
1480
+ }
1481
+ # OK
1482
+ return SatpMode::Sv48;
1483
+ } else if ((MXLEN == 64) && (mode_val == $bits(SatpMode::Sv57))) {
1484
+ # Sv57 is only defined when XLEN == 64
1485
+ if (effective_mode == PrivilegeMode::S && CSR[mstatus].SXL != $bits(XRegWidth::XLEN64)) {
1486
+ # not supported in this XLEN
1487
+ return SatpMode::Reserved;
1488
+ }
1489
+ if (effective_mode == PrivilegeMode::U && CSR[sstatus].UXL != $bits(XRegWidth::XLEN64)) {
1490
+ # not supported in this XLEN
1491
+ return SatpMode::Reserved;
1492
+ }
1493
+ if (!implemented?(ExtensionName::Sv57)) {
1494
+ # not supported in this configuration
1495
+ return SatpMode::Reserved;
1496
+ }
1497
+ # OK
1498
+ return SatpMode::Sv57;
1499
+ } else {
1500
+ return SatpMode::Reserved;
1501
+ }
1502
+ } else {
1503
+ return SatpMode::Reserved;
1504
+ }
1505
+ }
1506
+ }
1507
+
1508
+ function current_gstage_translation_mode {
1509
+ returns HgatpMode
1510
+ description {
1511
+ Returns the current second-stage translation mode for a load or store
1512
+ from VS-mode or VU-mode.
1513
+ }
1514
+ body {
1515
+ return $enum(HgatpMode, CSR[hgatp].MODE);
1516
+ }
1517
+ }
1518
+
1519
+ function translate_gstage {
1520
+ returns TranslationResult # physical address, which is *not* access checked
1521
+ arguments
1522
+ XReg gpaddr, # Guest physical address
1523
+ XReg vaddr, # original virtual address
1524
+ MemoryOperation op, # operation type
1525
+ PrivilegeMode effective_mode, # mode for the translation
1526
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
1527
+ description {
1528
+ Translates a guest physical address to a physical address.
1529
+ }
1530
+ body {
1531
+ TranslationResult result;
1532
+
1533
+ if (effective_mode == PrivilegeMode::S || effective_mode == PrivilegeMode::U) {
1534
+ # there is no gstage page walk
1535
+ result.paddr = gpaddr;
1536
+ return result;
1537
+ }
1538
+
1539
+ # mstatus.MXR affects G-stage XR, but not hstatus.MXR
1540
+ Boolean mxr = CSR[mstatus].MXR == 1;
1541
+
1542
+ if (GSTAGE_MODE_BARE && CSR[hgatp].MODE == $bits(HgatpMode::Bare)) {
1543
+ # bare mode
1544
+ result.paddr = gpaddr;
1545
+ return result;
1546
+ } else if (SV32X4_TRANSLATION && CSR[hgatp].MODE == $bits(HgatpMode::Sv32x4)) {
1547
+ # Sv39
1548
+ return gstage_page_walk<32, 34, 32, 2>(gpaddr, vaddr, op, effective_mode, false, encoding);
1549
+ } else if (SV39X4_TRANSLATION && CSR[hgatp].MODE == $bits(HgatpMode::Sv39x4)) {
1550
+ # Sv39
1551
+ return gstage_page_walk<39, 56, 64, 3>(gpaddr, vaddr, op, effective_mode, false, encoding);
1552
+ } else if (SV48X4_TRANSLATION && CSR[hgatp].MODE == $bits(HgatpMode::Sv48x4)) {
1553
+ # Sv48
1554
+ return gstage_page_walk<48, 56, 64, 4>(gpaddr, vaddr, op, effective_mode, false, encoding);
1555
+ } else if (SV57X4_TRANSLATION && CSR[hgatp].MODE == $bits(HgatpMode::Sv57x4)) {
1556
+ # Sv57
1557
+ return gstage_page_walk<57, 56, 64, 5>(gpaddr, vaddr, op, effective_mode, false, encoding);
1558
+ } else {
1559
+ # Invalid mode
1560
+ if (op == MemoryOperation::Read) {
1561
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst_value_for_guest_page_fault(op, encoding, true), effective_mode);
1562
+ } else if (op == MemoryOperation::Write || op == MemoryOperation::ReadModifyWrite) {
1563
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst_value_for_guest_page_fault(op, encoding, true), effective_mode);
1564
+ } else {
1565
+ assert(op == MemoryOperation::Fetch, "unexpected memory op");
1566
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst_value_for_guest_page_fault(op, encoding, true), effective_mode);
1567
+ }
1568
+ }
1569
+ }
1570
+ }
1571
+
1572
+ function tinst_value_for_guest_page_fault {
1573
+ returns
1574
+ XReg # tinst value
1575
+ arguments
1576
+ MemoryOperation op,
1577
+ Bits<INSTR_ENC_SIZE> encoding,
1578
+ Boolean for_final_vs_pte
1579
+ description {
1580
+ Returns the value of htinst/mtinst for a Guest Page Fault
1581
+ }
1582
+ body {
1583
+ if (for_final_vs_pte) {
1584
+ if (op == MemoryOperation::Fetch) {
1585
+ if (TINST_VALUE_ON_FINAL_INSTRUCTION_GUEST_PAGE_FAULT == "always zero") {
1586
+ return 0;
1587
+ } else {
1588
+ assert(TINST_VALUE_ON_FINAL_INSTRUCTION_GUEST_PAGE_FAULT == "always pseudoinstruction",
1589
+ "Instruction guest page faults can only report zero/pseudo instruction in tval");
1590
+ return 0x00002000;
1591
+ }
1592
+ } else if (op == MemoryOperation::Read) {
1593
+ if (TINST_VALUE_ON_FINAL_LOAD_GUEST_PAGE_FAULT == "always zero") {
1594
+ return 0;
1595
+ } else if (TINST_VALUE_ON_FINAL_LOAD_GUEST_PAGE_FAULT == "always pseudoinstruction") {
1596
+ if (($array_size(VSXLEN) == 1 && VSXLEN[0] == 32) || ((MXLEN == 64) && (CSR[hstatus].VSXL == $bits(XRegWidth::XLEN32)))) {
1597
+ return 0x00002000;
1598
+ } else {
1599
+ return 0x00003000;
1600
+ }
1601
+ } else if (TINST_VALUE_ON_FINAL_LOAD_GUEST_PAGE_FAULT == "always transformed standard instruction") {
1602
+ return tinst_transform(encoding, 0); # all guest page faults are aligned
1603
+ } else {
1604
+ unpredictable("Custom value written into htinst/mtinst");
1605
+ }
1606
+ } else if (op == MemoryOperation::Write || op == MemoryOperation::ReadModifyWrite) {
1607
+ if (TINST_VALUE_ON_FINAL_STORE_AMO_GUEST_PAGE_FAULT == "always zero") {
1608
+ return 0;
1609
+ } else if (TINST_VALUE_ON_FINAL_STORE_AMO_GUEST_PAGE_FAULT == "always pseudoinstruction") {
1610
+ if (($array_size(VSXLEN) == 1 && VSXLEN[0] == 32) || ((MXLEN == 64) && (CSR[hstatus].VSXL == $bits(XRegWidth::XLEN32)))) {
1611
+ return 0x00002020;
1612
+ } else {
1613
+ return 0x00003020;
1614
+ }
1615
+ } else if (TINST_VALUE_ON_FINAL_STORE_AMO_GUEST_PAGE_FAULT == "always transformed standard instruction") {
1616
+ return tinst_transform(encoding, 0); # all guest page faults are aligned
1617
+ } else {
1618
+ unpredictable("Custom value written into htinst/mtinst");
1619
+ }
1620
+ }
1621
+ } else {
1622
+ if (REPORT_GPA_IN_TVAL_ON_INTERMEDIATE_GUEST_PAGE_FAULT) {
1623
+ # spec states hardware must write the pseduo-instruction values to *tinst
1624
+ if (($array_size(VSXLEN) == 1 && VSXLEN[0] == 32) || ((MXLEN == 64) && (CSR[hstatus].VSXL == $bits(XRegWidth::XLEN32)))) {
1625
+ return 0x00002000;
1626
+ } else if (($array_size(VSXLEN) == 1 && VSXLEN[0] == 64) || ((MXLEN == 64) && (CSR[hstatus].VSXL == $bits(XRegWidth::XLEN64)))) {
1627
+ return 0x00003000;
1628
+ }
1629
+ }
1630
+ }
1631
+ }
1632
+ }
1633
+
1634
+ function tinst_transform {
1635
+ returns Bits<INSTR_ENC_SIZE> # transformed value
1636
+ arguments
1637
+ Bits<INSTR_ENC_SIZE> encoding,
1638
+ Bits<5> addr_offset # the offset between the faulting address and the start of the operation (only non-zero for misaligned load/store)
1639
+ description {
1640
+ Returns the standard transformation of an encoding for htinst/mtinst
1641
+ }
1642
+ body {
1643
+ if (encoding[1:0] == 0b11) {
1644
+ if (encoding[6:2] == 5'b00001) {
1645
+ # 32-bit load instruction
1646
+ return {{12{1'b0}}, addr_offset, encoding[14:0]};
1647
+ } else if (encoding[6:2] == 5'b01000) {
1648
+ # 32-bit store instruction
1649
+ return {{7{1'b0}}, encoding[24:20], addr_offset, encoding[14:12], {5{1'b0}}, encoding[6:0]};
1650
+ } else if (encoding[6:2] == 5'b01011) {
1651
+ # 32-bit atomic instruction
1652
+ return {encoding[31:20], addr_offset, encoding[14:0]};
1653
+ } else if (encoding[6:2] == 5'b00011) {
1654
+ # 32-bit virtual machine load/store
1655
+ return {encoding[31:20], addr_offset, encoding[14:0]};
1656
+ } else {
1657
+ assert(false, "Bad transform");
1658
+ }
1659
+ } else {
1660
+ assert(false, "TODO: compressed instruction");
1661
+ }
1662
+ }
1663
+ }
1664
+
1665
+ function transformed_standard_instruction_for_tinst {
1666
+ returns
1667
+ Bits<INSTR_ENC_SIZE> # transformed instruction encoding
1668
+ arguments
1669
+ Bits<INSTR_ENC_SIZE> original # original instruction encoding
1670
+ description {
1671
+ Transforms an instruction encoding for htinst.
1672
+ }
1673
+ body {
1674
+ assert(false, "TODO");
1675
+ return 0;
1676
+ }
1677
+ }
1678
+
1679
+ function tinst_value {
1680
+ returns
1681
+ XReg # tinst value
1682
+ arguments
1683
+ ExceptionCode code, # expect type
1684
+ Bits<INSTR_ENC_SIZE> encoding # instruction encoding, needed when tinst value might be the encoding
1685
+ description {
1686
+ Returns the value of htinst/mtinst for the given exception code.
1687
+ }
1688
+ body {
1689
+ if (code == ExceptionCode::InstructionAddressMisaligned) {
1690
+ if (TINST_VALUE_ON_INSTRUCTION_ADDRESS_MISALIGNED == "always zero") {
1691
+ return 0;
1692
+ } else {
1693
+ unpredictable("An unpredictable value is written into tinst in response to an InstructionAddressMisaligned exception");
1694
+ }
1695
+ } else if (code == ExceptionCode::InstructionAccessFault) {
1696
+ # always zero
1697
+ return 0;
1698
+ } else if (code == ExceptionCode::IllegalInstruction) {
1699
+ # always zero
1700
+ return 0;
1701
+ } else if (code == ExceptionCode::Breakpoint) {
1702
+ if (TINST_VALUE_ON_BREAKPOINT == "always zero") {
1703
+ return 0;
1704
+ } else {
1705
+ unpredictable("An unpredictable value is written into tinst in response to a Breakpoint exception");
1706
+ }
1707
+ } else if (code == ExceptionCode::VirtualInstruction) {
1708
+ if (TINST_VALUE_ON_VIRTUAL_INSTRUCTION == "always zero") {
1709
+ return 0;
1710
+ } else {
1711
+ unpredictable("An unpredictable value is written into tinst in response to a VirtualInstruction exception");
1712
+ }
1713
+ } else if (code == ExceptionCode::LoadAddressMisaligned) {
1714
+ if (TINST_VALUE_ON_LOAD_ADDRESS_MISALIGNED == "always zero") {
1715
+ return 0;
1716
+ } else if (TINST_VALUE_ON_LOAD_ADDRESS_MISALIGNED == "always transformed standard instruction") {
1717
+ return transformed_standard_instruction_for_tinst(encoding);
1718
+ } else {
1719
+ unpredictable("An unpredictable value is written into tinst in response to a LoadAddressMisaligned exception");
1720
+ }
1721
+ } else if (code == ExceptionCode::LoadAccessFault) {
1722
+ if (TINST_VALUE_ON_LOAD_ACCESS_FAULT == "always zero") {
1723
+ return 0;
1724
+ } else if (TINST_VALUE_ON_LOAD_ACCESS_FAULT == "always transformed standard instruction") {
1725
+ return transformed_standard_instruction_for_tinst(encoding);
1726
+ } else {
1727
+ unpredictable("An unpredictable value is written into tinst in response to a LoadAccessFault exception");
1728
+ }
1729
+ } else if (code == ExceptionCode::StoreAmoAddressMisaligned) {
1730
+ if (TINST_VALUE_ON_STORE_AMO_ADDRESS_MISALIGNED == "always zero") {
1731
+ return 0;
1732
+ } else if (TINST_VALUE_ON_STORE_AMO_ADDRESS_MISALIGNED == "always transformed standard instruction") {
1733
+ return transformed_standard_instruction_for_tinst(encoding);
1734
+ } else {
1735
+ unpredictable("An unpredictable value is written into tinst in response to a StoreAmoAddressMisaligned exception");
1736
+ }
1737
+ } else if (code == ExceptionCode::StoreAmoAccessFault) {
1738
+ if (TINST_VALUE_ON_STORE_AMO_ACCESS_FAULT == "always zero") {
1739
+ return 0;
1740
+ } else if (TINST_VALUE_ON_STORE_AMO_ACCESS_FAULT == "always transformed standard instruction") {
1741
+ return transformed_standard_instruction_for_tinst(encoding);
1742
+ } else {
1743
+ unpredictable("An unpredictable value is written into tinst in response to a StoreAmoAccessFault exception");
1744
+ }
1745
+ } else if (code == ExceptionCode::Ucall) {
1746
+ if (TINST_VALUE_ON_UCALL == "always zero") {
1747
+ return 0;
1748
+ } else {
1749
+ unpredictable("An unpredictable value is written into tinst in response to a UCall exception");
1750
+ }
1751
+ } else if (code == ExceptionCode::Scall) {
1752
+ if (TINST_VALUE_ON_SCALL == "always zero") {
1753
+ return 0;
1754
+ } else {
1755
+ unpredictable("An unpredictable value is written into tinst in response to a SCall exception");
1756
+ }
1757
+ } else if (code == ExceptionCode::Mcall) {
1758
+ if (TINST_VALUE_ON_MCALL == "always zero") {
1759
+ return 0;
1760
+ } else {
1761
+ unpredictable("An unpredictable value is written into tinst in response to a MCall exception");
1762
+ }
1763
+ } else if (code == ExceptionCode::VScall) {
1764
+ if (TINST_VALUE_ON_VSCALL == "always zero") {
1765
+ return 0;
1766
+ } else {
1767
+ unpredictable("An unpredictable value is written into tinst in response to a VSCall exception");
1768
+ }
1769
+ } else if (code == ExceptionCode::InstructionPageFault) {
1770
+ return 0;
1771
+ } else if (code == ExceptionCode::LoadPageFault) {
1772
+ if (TINST_VALUE_ON_LOAD_PAGE_FAULT == "always zero") {
1773
+ return 0;
1774
+ } else if (TINST_VALUE_ON_LOAD_PAGE_FAULT == "always transformed standard instruction") {
1775
+ return transformed_standard_instruction_for_tinst(encoding);
1776
+ } else {
1777
+ unpredictable("An unpredictable value is written into tinst in response to a LoadPageFault exception");
1778
+ }
1779
+ } else if (code == ExceptionCode::StoreAmoPageFault) {
1780
+ if (TINST_VALUE_ON_STORE_AMO_PAGE_FAULT == "always zero") {
1781
+ return 0;
1782
+ } else if (TINST_VALUE_ON_STORE_AMO_PAGE_FAULT == "always transformed standard instruction") {
1783
+ return transformed_standard_instruction_for_tinst(encoding);
1784
+ } else {
1785
+ unpredictable("An unpredictable value is written into tinst in response to a StoreAmoPageFault exception");
1786
+ }
1787
+ } else {
1788
+ assert(false, "Unhandled exception type");
1789
+ }
1790
+ }
1791
+ }
1792
+
1793
+ function gstage_page_walk {
1794
+ template
1795
+ U32 VA_SIZE, # virtual address size (Sv32 = 32, Sv39 = 39, Sv48 = 48, Sv57 = 57)
1796
+ U32 PA_SIZE, # physical address size (Sv32 = 34, Sv39 = 56, Sv48 = 56, Sv57 = 56)
1797
+ U32 PTESIZE, # length, in bits, of a Page Table Entry (Sv32 = 32, others = 64)
1798
+ U32 LEVELS # levels in the page table (Sv32 = 2, Sv39 = 3, Sv48 = 4, Sv57 = 5)
1799
+ returns
1800
+ TranslationResult # the translated address and attributes
1801
+ arguments
1802
+ XReg gpaddr, # the guest physical address to translate
1803
+ XReg vaddr, # the original virtual address to translate
1804
+ MemoryOperation op, # the operation type
1805
+ PrivilegeMode effective_mode, # the mode for this walk (usually effective_ldst_mode(), though different for HLV/HLX/HSV)
1806
+ Boolean for_final_vs_pte, # true when this walk is for a final translation, rather than an intermediate VS-stage translation to get the paddr of a guest PTE
1807
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
1808
+ description {
1809
+ Translate guest physical address to physical address through a page walk.
1810
+
1811
+ May raise a Guest Page Fault if an error involving the page table structure occurs along the walk.
1812
+
1813
+ Implicit reads of the page table are accessed check, and may raise Access Faults.
1814
+ Implicit writes (updates of A/D) are also accessed checked, and may raise Access Faults
1815
+
1816
+ The translated address _is not_ accessed checked.
1817
+
1818
+ Returns the translated physical address.
1819
+ }
1820
+ body {
1821
+ Bits<PA_SIZE> ppn;
1822
+ TranslationResult result;
1823
+
1824
+ # the VPN size is 10 bits in Sv32, and 9 bits in all others
1825
+ U32 VPN_SIZE = (LEVELS == 2) ? 10 : 9;
1826
+
1827
+ # if there is an exception, set up the correct type
1828
+ ExceptionCode access_fault_code =
1829
+ op == MemoryOperation::Read ?
1830
+ ExceptionCode::LoadAccessFault :
1831
+ ( op == MemoryOperation::Fetch ?
1832
+ ExceptionCode::InstructionAccessFault :
1833
+ ExceptionCode::StoreAmoAccessFault );
1834
+
1835
+ ExceptionCode page_fault_code =
1836
+ op == MemoryOperation::Read ?
1837
+ ExceptionCode::LoadGuestPageFault :
1838
+ ( op == MemoryOperation::Fetch ?
1839
+ ExceptionCode::InstructionGuestPageFault :
1840
+ ExceptionCode::StoreAmoGuestPageFault );
1841
+
1842
+ Boolean mxr = for_final_vs_pte && (CSR[mstatus].MXR == 1);
1843
+ Boolean pbmte = implemented?(ExtensionName::Svpbmt) && CSR[menvcfg].PBMTE == 1;
1844
+ Boolean adue = implemented?(ExtensionName::Svadu) && CSR[menvcfg].ADUE == 1;
1845
+
1846
+ # set up the value that will be written into mtinst/htinst, if required
1847
+ Bits<32> tinst = tinst_value_for_guest_page_fault(op, encoding, for_final_vs_pte);
1848
+
1849
+ U32 max_gpa_width = LEVELS * VPN_SIZE + 2 + 12;
1850
+ if (gpaddr >> max_gpa_width != 0) {
1851
+ # Guest physical address is too large for the page table
1852
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1853
+ }
1854
+
1855
+ ppn = CSR[hgatp].PPN;
1856
+
1857
+ for (U32 i = (LEVELS - 1); i >= 0; i--) {
1858
+ # first level is x4 for G-stage, so add two bits to the vpn size
1859
+ U32 this_vpn_size = (i == (LEVELS - 1)) ? VPN_SIZE + 2 : VPN_SIZE;
1860
+ U32 vpn = (gpaddr >> (12 + VPN_SIZE*i)) & ((1 << this_vpn_size) - 1);
1861
+
1862
+ Bits<PA_SIZE> pte_paddr = (ppn << 12) + (vpn * (PTESIZE/8));
1863
+
1864
+ # check hw page table access permission
1865
+ if (!pma_applies?(PmaAttribute::HardwarePageTableRead, pte_paddr, PTESIZE)) {
1866
+ raise (access_fault_code, PrivilegeMode::U, vaddr);
1867
+ }
1868
+ access_check(pte_paddr, PTESIZE, vaddr, MemoryOperation::Read, access_fault_code, effective_mode);
1869
+
1870
+ Bits<PTESIZE> pte = read_physical_memory<PTESIZE>(pte_paddr);
1871
+ PteFlags pte_flags = pte[9:0];
1872
+
1873
+ # check if any reserved bits are set
1874
+ # Sv32 has no reserved bits, and Sv39/48/57 all have reserved bits at 58:54
1875
+ if ((VA_SIZE != 32) && (pte[58:54] != 0)) {
1876
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1877
+ }
1878
+ if (!implemented?(ExtensionName::Svrsw60t59b)) {
1879
+ if ((PTESIZE >= 64) && pte[60:59] != 0) {
1880
+ # 60:59 are reserved if Svrsw60t59b is not supported
1881
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1882
+ }
1883
+ }
1884
+ if (!implemented?(ExtensionName::Svnapot)) {
1885
+ if ((PTESIZE >= 64) && pte[63] != 0) {
1886
+ # N is reserved if Svnapot is not supported
1887
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1888
+ }
1889
+ }
1890
+ if ((PTESIZE >= 64) && !pbmte && (pte[62:61] != 0)) {
1891
+ # PBMTE is reserved when Svpbmt is not enabled
1892
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1893
+ }
1894
+ if ((PTESIZE >= 64) && pbmte && (pte[62:61] == 3)) {
1895
+ # PBMTE == 3 is reserved
1896
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1897
+ }
1898
+
1899
+ if (pte_flags.V == 0) {
1900
+ # page table entry is not valid
1901
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1902
+ }
1903
+
1904
+ if (pte_flags.R == 0 && pte_flags.W == 1) {
1905
+ # Writable pages must also be readable
1906
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1907
+ }
1908
+
1909
+ if (pte_flags.R == 1 || pte_flags.X == 1) {
1910
+ # leaf page table
1911
+ if (pte_flags.U == 0) {
1912
+ # all g-stage tables *must* be user mode accessible
1913
+ # since all g-stage accesses appear like U-mode accesses
1914
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1915
+ }
1916
+
1917
+ if (((op == MemoryOperation::Write) || (op == MemoryOperation::ReadModifyWrite))
1918
+ && (pte_flags.W == 0)) {
1919
+ # not write permission for store
1920
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1921
+ } else if ((op == MemoryOperation::Fetch)
1922
+ && (pte_flags.X == 0)) {
1923
+ # no execute permission
1924
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1925
+ } else if ((op == MemoryOperation::Read) || (op == MemoryOperation::ReadModifyWrite)) {
1926
+ if (((!mxr) && (pte_flags.R == 0))
1927
+ || ((mxr) && (pte_flags.X == 0 && pte_flags.R == 0))) {
1928
+ # no read permission
1929
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1930
+ }
1931
+ }
1932
+
1933
+ # ensure remaining PPN bits are zero, otherwise there is a misaligned super page
1934
+ if ((i > 0) && (pte[(i-1)*VPN_SIZE:0] != 0)) {
1935
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1936
+ }
1937
+
1938
+ # check access and dirty bits
1939
+ if ((pte_flags.A == 0) # access is clear
1940
+ || ((pte_flags.D == 0) # or dirty is clear and this is a (read-modify-)write
1941
+ && ((op == MemoryOperation::Write)
1942
+ || (op == MemoryOperation::ReadModifyWrite)))) {
1943
+
1944
+ # check for hardware update of A/D bits
1945
+ if (adue) {
1946
+ # Svadu requires page tables to be located in memory with hardware page-table write access
1947
+ # and RsrvEventual PMA
1948
+ if (!pma_applies?(PmaAttribute::RsrvEventual, pte_paddr, PTESIZE)) {
1949
+ raise (access_fault_code, PrivilegeMode::U, vaddr);
1950
+ }
1951
+ if (!pma_applies?(PmaAttribute::HardwarePageTableWrite, pte_paddr, PTESIZE)) {
1952
+ raise (access_fault_code, PrivilegeMode::U, vaddr);
1953
+ }
1954
+
1955
+ access_check(pte_paddr, PTESIZE, vaddr, MemoryOperation::Write, access_fault_code, effective_mode);
1956
+
1957
+ Boolean success;
1958
+ Bits<PTESIZE> updated_pte;
1959
+ if (pte_flags.D == 0 && (op == MemoryOperation::Write || op == MemoryOperation::ReadModifyWrite)) {
1960
+ # try to set both A and D bits
1961
+ updated_pte = pte | 0b11000000;
1962
+ } else {
1963
+ # try to set the A bit
1964
+ updated_pte = pte | 0b01000000;
1965
+ }
1966
+
1967
+ if (PTESIZE == 32) {
1968
+ success = atomic_check_then_write_32(pte_paddr, pte, updated_pte);
1969
+ } else if (PTESIZE == 64) {
1970
+ success = atomic_check_then_write_64(pte_paddr, pte, updated_pte);
1971
+ } else {
1972
+ assert(false, "Unexpected PTESIZE");
1973
+ }
1974
+
1975
+
1976
+ if (!success) {
1977
+ # the PTE changed between the read during the walk and the attempted atomic update
1978
+ # roll back, and try this level again
1979
+ i = i + 1;
1980
+ } else {
1981
+ # successful translation and update
1982
+ result.paddr = pte_paddr;
1983
+ if (PTESIZE >= 64) {
1984
+ result.pbmt = $enum(Pbmt, pte[62:61]);
1985
+ }
1986
+ result.pte_flags = pte_flags;
1987
+ return result;
1988
+ }
1989
+ } else {
1990
+ # A or D bit needs updated
1991
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
1992
+ }
1993
+ }
1994
+
1995
+ } else {
1996
+ # pointer to next level
1997
+ if (i == 0) {
1998
+ # a pointer can't exist on the last level
1999
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
2000
+ }
2001
+
2002
+ if (pte_flags.D == 1 || pte_flags.A == 1 || pte_flags.U == 1) {
2003
+ # D, A, and U are reserved in non-leaf PTEs
2004
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
2005
+ }
2006
+
2007
+ if ((VA_SIZE != 32) && (pte[62:61] != 0)) {
2008
+ # PBMT must be zero in a pointer PTE
2009
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
2010
+ }
2011
+
2012
+ if ((VA_SIZE != 32) && pte[63] != 0) {
2013
+ # N must be zero in a pointer PTE
2014
+ raise_guest_page_fault(op, gpaddr, vaddr, tinst, effective_mode);
2015
+ }
2016
+
2017
+ # fall through to next level
2018
+ ppn = pte[PA_SIZE-3:10] << 12;
2019
+ }
2020
+ }
2021
+ }
2022
+ }
2023
+
2024
+
2025
+ function stage1_page_walk {
2026
+ template
2027
+ U32 VA_SIZE, # virtual address size (Sv32 = 32, Sv39 = 39, Sv48 = 48, Sv57 = 57)
2028
+ U32 PA_SIZE, # physical address size (Sv32 = 34, Sv39 = 56, Sv48 = 56, Sv57 = 56)
2029
+ U32 PTESIZE, # length, in bits, of a Page Table Entry (Sv32 = 4, others = 8)
2030
+ U32 LEVELS # levels in the page table (Sv32 = 2, Sv39 = 3, Sv48 = 4, Sv57 = 5)
2031
+ returns
2032
+ TranslationResult # the translated address and attributes
2033
+ arguments
2034
+ Bits<MXLEN> vaddr, # the virtual address to translate
2035
+ MemoryOperation op, # the operation type
2036
+ PrivilegeMode effective_mode, # the mode for this walk (usually effective_ldst_mode(), though different for HLV/HLX/HSV)
2037
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
2038
+ description {
2039
+ Translate virtual address to physical address through a page walk.
2040
+
2041
+ May raise a Page Fault if an error involving the page table structure occurs along the walk.
2042
+
2043
+ Implicit reads of the page table are accessed check, and may raise Access Faults.
2044
+ Implicit writes (updates of A/D) are also accessed checked, and may raise Access Faults
2045
+
2046
+ The translated address _is not_ accessed checked.
2047
+
2048
+ Returns the translated guest physical address.
2049
+ }
2050
+ body {
2051
+ Bits<PA_SIZE> ppn;
2052
+ TranslationResult result;
2053
+
2054
+ # the VPN size is 10 bits in Sv32, and 9 bits in all others
2055
+ U32 VPN_SIZE = (LEVELS == 2) ? 10 : 9;
2056
+
2057
+ # if there is an exception, set up the correct type
2058
+ ExceptionCode access_fault_code =
2059
+ op == MemoryOperation::Read ?
2060
+ ExceptionCode::LoadAccessFault :
2061
+ ( op == MemoryOperation::Fetch ?
2062
+ ExceptionCode::InstructionAccessFault :
2063
+ ExceptionCode::StoreAmoAccessFault );
2064
+
2065
+ ExceptionCode page_fault_code =
2066
+ op == MemoryOperation::Read ?
2067
+ ExceptionCode::LoadPageFault :
2068
+ ( op == MemoryOperation::Fetch ?
2069
+ ExceptionCode::InstructionPageFault :
2070
+ ExceptionCode::StoreAmoPageFault );
2071
+
2072
+ # shadow stacks enabled?
2073
+ Boolean sse = false;
2074
+ # if (CSR[misa].H == 1 && effective_mode == PrivilegeMode::VS) {
2075
+ # sse = CSR[henvcfg].SSE == 1;
2076
+ # } else if (CSR[misa].H == 1 && effective_mode == PrivilegeMode::VU) {
2077
+ # sse = CSR[senvcfg].SSE == 1;
2078
+ # } else if (CSR[misa].U == 1 && effective_mode == PrivilegeMode::U) {
2079
+ # sse = CSR[senvcfg].SSE == 1;
2080
+ # } else if (CSR[misa].S == 1 && effective_mode == PrivilegeMode::S) {
2081
+ # sse = CSR[menvcfg].SSE == 1;
2082
+ # } else {
2083
+ # # M-mode
2084
+ # sse = false;
2085
+ # }
2086
+
2087
+ # access/dirty bit hardware update enable?
2088
+ Boolean adue;
2089
+ if (CSR[misa].H == 1 && (effective_mode == PrivilegeMode::VS || effective_mode == PrivilegeMode::VU)) {
2090
+ adue = implemented?(ExtensionName::Svadu) && CSR[henvcfg].ADUE == 1;
2091
+ } else {
2092
+ adue = implemented?(ExtensionName::Svadu) && CSR[menvcfg].ADUE == 1;
2093
+ }
2094
+
2095
+ # Page-based memory type enable?
2096
+ Boolean pbmte;
2097
+ if (VA_SIZE == 32) {
2098
+ # not Sv32 (PBMT is not defined for Sv32)
2099
+ pbmte = false;
2100
+ } else {
2101
+ if (CSR[misa].H == 1 && (effective_mode == PrivilegeMode::VS || effective_mode == PrivilegeMode::VU)) {
2102
+ pbmte = implemented?(ExtensionName::Svpbmt) && CSR[henvcfg].PBMTE == 1;
2103
+ } else {
2104
+ pbmte = implemented?(ExtensionName::Svpbmt) && CSR[menvcfg].PBMTE == 1;
2105
+ }
2106
+ }
2107
+
2108
+ # make execute readable?
2109
+ Boolean mxr;
2110
+ if (CSR[misa].H == 1 && (effective_mode == PrivilegeMode::VS || effective_mode == PrivilegeMode::VU)) {
2111
+ # HS-level sstatus.MXR makes execute-only pages readable for both stages of address translation
2112
+ # (VS-stage and G-stage), whereas vsstatus.MXR affects only the first translation stage (VS-stage)
2113
+ mxr = (CSR[mstatus].MXR == 1) || (CSR[vsstatus].MXR == 1);
2114
+ ppn = CSR[vsatp].PPN;
2115
+ } else {
2116
+ mxr = CSR[mstatus].MXR == 1;
2117
+ ppn = CSR[satp].PPN;
2118
+ }
2119
+
2120
+ # Supervisor access user page?
2121
+ Boolean sum;
2122
+ if (CSR[misa].H == 1 && (effective_mode == PrivilegeMode::VS)) {
2123
+ sum = CSR[vsstatus].SUM == 1;
2124
+ } else {
2125
+ sum = CSR[mstatus].SUM == 1;
2126
+ }
2127
+
2128
+ if ((VA_SIZE < xlen()) && (vaddr[xlen()-1:VA_SIZE] != {xlen()-VA_SIZE{vaddr[VA_SIZE - 1]}})) {
2129
+ # non-canonical virtual address raises a page fault
2130
+ # note that if pointer masking is enabled,
2131
+ # vaddr has already been transformed before reaching here
2132
+ raise (page_fault_code, mode(), vaddr);
2133
+ }
2134
+
2135
+ for (U32 I = (LEVELS - 1); I >= 0; I--) {
2136
+ U32 vpn = (vaddr >> (12 + VPN_SIZE*I)) & ((1 `<< VPN_SIZE) - 1);
2137
+
2138
+ Bits<PA_SIZE> pte_gpaddr = (ppn << 12) + (vpn * (PTESIZE/8));
2139
+
2140
+ TranslationResult pte_phys =
2141
+ translate_gstage(
2142
+ pte_gpaddr,
2143
+ vaddr,
2144
+ MemoryOperation::Read,
2145
+ effective_mode,
2146
+ encoding
2147
+ );
2148
+
2149
+ # check hw page table access permission
2150
+ if (!pma_applies?(PmaAttribute::HardwarePageTableRead, pte_phys.paddr, PTESIZE)) {
2151
+ raise (access_fault_code, mode(), vaddr);
2152
+ }
2153
+
2154
+ # perform access check on the physical address of pte before it's used
2155
+ access_check(pte_phys.paddr, PTESIZE, vaddr, MemoryOperation::Read, access_fault_code, effective_mode);
2156
+
2157
+ Bits<PTESIZE> pte = read_physical_memory<PTESIZE>(pte_phys.paddr);
2158
+ PteFlags pte_flags = pte[9:0];
2159
+
2160
+ # shadow stack page?
2161
+ Boolean ss_page = (pte_flags.R == 0) && (pte_flags.W == 1) && (pte_flags.X == 0);
2162
+
2163
+ # check if any reserved bits are set
2164
+ # Sv32 has no reserved bits, and Sv39/48/57 all have reserved bits at 58:54
2165
+ if ((VA_SIZE != 32) && (pte[58:54] != 0)) {
2166
+ raise(page_fault_code, mode(), vaddr);
2167
+ }
2168
+
2169
+ if (pte_flags.V == 0) {
2170
+ # invalid entry
2171
+ raise (page_fault_code, mode(), vaddr);
2172
+ }
2173
+
2174
+ if (!sse) {
2175
+ if ((pte_flags.R == 0) && (pte_flags.W == 1)) {
2176
+ # write permission must also have read permission
2177
+ raise (page_fault_code, mode(), vaddr);
2178
+ }
2179
+ }
2180
+
2181
+ if (pbmte) {
2182
+ # PBMT == 3 is reserved
2183
+ if (pte[62:61] == 3) {
2184
+ raise (page_fault_code, mode(), vaddr);
2185
+ }
2186
+ } else {
2187
+ # PBMT is reserved if Svpbmt is not supported)
2188
+ if ((PTESIZE >= 64) && (pte[62:61] != 0)) {
2189
+ raise (page_fault_code, mode(), vaddr);
2190
+ }
2191
+ }
2192
+
2193
+ if (!implemented?(ExtensionName::Svrsw60t59b)) {
2194
+ if ((PTESIZE >= 64) && pte[60:59] != 0) {
2195
+ # 60:59 are reserved if Svrsw60t59b is not supported
2196
+ raise (page_fault_code, mode(), vaddr);
2197
+ }
2198
+ }
2199
+
2200
+ if (!implemented?(ExtensionName::Svnapot)) {
2201
+ if ((PTESIZE >= 64) && (pte[63] != 0)) {
2202
+ # N is reserved if Svnapot is not supported
2203
+ raise (page_fault_code, mode(), vaddr);
2204
+ }
2205
+ }
2206
+
2207
+ if (pte_flags.R == 1 || pte_flags.X == 1) {
2208
+ # found a leaf PTE
2209
+ Bits<PA_SIZE> paddr_base = pte[PA_SIZE-3:I*VPN_SIZE + 10] `<< (I*VPN_SIZE + 12);
2210
+ Bits<PA_SIZE> offset = vaddr[I*VPN_SIZE + 11:0];
2211
+
2212
+ # see if there is permission to perform the access
2213
+ if (op == MemoryOperation::Read || op == MemoryOperation::ReadModifyWrite) {
2214
+ if (((!mxr) && (pte_flags.R == 0))
2215
+ || ((mxr) && (pte_flags.X == 0 && pte_flags.R == 0))) {
2216
+ # no read permission
2217
+ raise (page_fault_code, mode(), vaddr);
2218
+ }
2219
+
2220
+ if (effective_mode == PrivilegeMode::U && pte_flags.U == 0) {
2221
+ # U-mode can never access supervisor page
2222
+ raise (page_fault_code, mode(), vaddr);
2223
+ } else if (CSR[misa].H == 1 && effective_mode == PrivilegeMode::VU && pte_flags.U == 0) {
2224
+ # VU-mode can never access supervisor page
2225
+ raise (page_fault_code, mode(), vaddr);
2226
+ } else if (effective_mode == PrivilegeMode::S && pte_flags.U == 1 && !sum) {
2227
+ # S-mode cannot access User page unless mstatus.SUM == 1
2228
+ raise (page_fault_code, mode(), vaddr);
2229
+ } else if (effective_mode == PrivilegeMode::VS && pte_flags.U == 1 && !sum) {
2230
+ # VS-mode cannot access User page unless vsstatus.SUM == 1
2231
+ raise (page_fault_code, mode(), vaddr);
2232
+ }
2233
+ }
2234
+ if (((op == MemoryOperation::Write) || (op == MemoryOperation::ReadModifyWrite))
2235
+ && (pte_flags.W == 0)) {
2236
+ # no write permission
2237
+ raise (page_fault_code, mode(), vaddr);
2238
+ } else if ((op == MemoryOperation::Fetch) && (pte_flags.X == 0)) {
2239
+ # no execute permission
2240
+ raise (page_fault_code, mode(), vaddr);
2241
+ } else if ((op == MemoryOperation::Fetch) && ss_page) {
2242
+ # fetch from Shadow Stack never allowed
2243
+ raise (page_fault_code, mode(), vaddr);
2244
+ }
2245
+
2246
+ # ensure remaining PPN bits are zero, otherwise there is a misaligned super page
2247
+ raise (page_fault_code, mode(), vaddr) if ((I > 0) && (pte[I*VPN_SIZE + 10:10] != 0));
2248
+
2249
+ # check access and dirty bits
2250
+ if ((pte_flags.A == 0) # access is clear
2251
+ || ((pte_flags.D == 0) # or dirty is clear and this is a (read-modify-)write
2252
+ && ((op == MemoryOperation::Write)
2253
+ || (op == MemoryOperation::ReadModifyWrite)))) {
2254
+
2255
+ # check for hardware update of A/D bits
2256
+ if (adue) {
2257
+ # translate again, this time with write permission
2258
+ TranslationResult pte_phys =
2259
+ translate_gstage(
2260
+ pte_gpaddr,
2261
+ vaddr,
2262
+ MemoryOperation::Write,
2263
+ effective_mode,
2264
+ encoding
2265
+ );
2266
+
2267
+ # Svadu requires page tables to be located in memory with hardware page-table write access
2268
+ # and RsrvEventual PMA
2269
+ if (!pma_applies?(PmaAttribute::RsrvEventual, pte_phys.paddr, PTESIZE)) {
2270
+ raise (access_fault_code, effective_mode, vaddr);
2271
+ }
2272
+ if (!pma_applies?(PmaAttribute::HardwarePageTableWrite, pte_phys.paddr, PTESIZE)) {
2273
+ raise (access_fault_code, effective_mode, vaddr);
2274
+ }
2275
+
2276
+ access_check(pte_phys.paddr, PTESIZE, vaddr, MemoryOperation::Write, access_fault_code, effective_mode);
2277
+
2278
+ Boolean success;
2279
+ Bits<PTESIZE> updated_pte;
2280
+ if (pte_flags.D == 0 && (op == MemoryOperation::Write || op == MemoryOperation::ReadModifyWrite)) {
2281
+ # try to set both A and D bits
2282
+ updated_pte = pte | 0b11000000;
2283
+ } else {
2284
+ # try to set the A bit
2285
+ updated_pte = pte | 0b01000000;
2286
+ }
2287
+
2288
+ if (PTESIZE == 32) {
2289
+ success = atomic_check_then_write_32(pte_phys.paddr, pte, updated_pte);
2290
+ } else if (PTESIZE == 64) {
2291
+ success = atomic_check_then_write_64(pte_phys.paddr, pte, updated_pte);
2292
+ } else {
2293
+ assert(false, "Unexpected PTESIZE");
2294
+ }
2295
+
2296
+
2297
+ if (!success) {
2298
+ # the PTE changed between the read during the walk and the attempted atomic update
2299
+ # roll back, and try this level again
2300
+ I = I + 1;
2301
+ } else {
2302
+ # successful translation and update
2303
+
2304
+ TranslationResult pte_phys = translate_gstage(
2305
+ paddr_base + offset,
2306
+ vaddr,
2307
+ op,
2308
+ effective_mode,
2309
+ encoding
2310
+ );
2311
+ result.paddr = pte_phys.paddr;
2312
+ result.pbmt = pte_phys.pbmt == Pbmt::PMA ? $enum(Pbmt, pte[62:61]) : pte_phys.pbmt;
2313
+ result.pte_flags = pte_flags;
2314
+ return result;
2315
+ }
2316
+ } else {
2317
+ # A or D bit needs updated
2318
+ raise(page_fault_code, mode(), vaddr);
2319
+ }
2320
+ }
2321
+
2322
+ # translation succeeded
2323
+ TranslationResult pte_phys =
2324
+ translate_gstage(
2325
+ paddr_base + offset,
2326
+ vaddr,
2327
+ op,
2328
+ effective_mode,
2329
+ encoding
2330
+ );
2331
+ result.paddr = pte_phys.paddr;
2332
+ if (PTESIZE >= 64) {
2333
+ result.pbmt = pte_phys.pbmt == Pbmt::PMA ? $enum(Pbmt, pte[62:61]) : pte_phys.pbmt;
2334
+ }
2335
+ result.pte_flags = pte_flags;
2336
+ return result;
2337
+ } else {
2338
+ # found a pointer to the next level
2339
+
2340
+ if (I == 0) {
2341
+ # a pointer can't exist on the last level
2342
+ raise (page_fault_code, mode(), vaddr);
2343
+ }
2344
+
2345
+ if (pte_flags.D == 1 || pte_flags.A == 1 || pte_flags.U == 1) {
2346
+ # D, A, and U are reserved in non-leaf PTEs
2347
+ raise (page_fault_code, mode(), vaddr);
2348
+ }
2349
+
2350
+ if ((VA_SIZE != 32) && (pte[62:61] != 0)) {
2351
+ # PBMT must be zero in a pointer PTE
2352
+ raise (page_fault_code, mode(), vaddr);
2353
+ }
2354
+
2355
+ if ((VA_SIZE != 32) && pte[63] != 0) {
2356
+ # N must be zero in a pointer PTE
2357
+ raise (page_fault_code, mode(), vaddr);
2358
+ }
2359
+
2360
+ # fall through to next level
2361
+ ppn = pte[PA_SIZE-3:10];
2362
+ }
2363
+ }
2364
+ }
2365
+ }
2366
+
2367
+ function translate {
2368
+ returns
2369
+ TranslationResult # translated physical address and PBMT value (for Svpbmt)
2370
+ arguments
2371
+ XReg vaddr,
2372
+ MemoryOperation op,
2373
+ PrivilegeMode effective_mode,
2374
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
2375
+ description {
2376
+ Translate a virtual address for operation type +op+ that appears to execute at
2377
+ +effective_mode+.
2378
+
2379
+ The translation will depend on the effective privilege mode.
2380
+
2381
+ May raise a Page Fault or Access Fault.
2382
+
2383
+ The final physical address is *not* access checked (for PMP, PMA, etc., violations).
2384
+ (though intermediate page table reads will be)
2385
+ }
2386
+ body {
2387
+
2388
+ #####################################################################
2389
+ # First, check for a cached translation result
2390
+ #####################################################################
2391
+
2392
+ Boolean cached_translation_valid;
2393
+ CachedTranslationResult cached_translation_result;
2394
+
2395
+ cached_translation_result =
2396
+ cached_translation(vaddr, op);
2397
+
2398
+ if (cached_translation_result.valid) {
2399
+ return cached_translation_result.result;
2400
+ }
2401
+
2402
+ #####################################################################
2403
+ # No cached translation, so go through the full translation process
2404
+ #####################################################################
2405
+
2406
+ TranslationResult result;
2407
+
2408
+ if (effective_mode == PrivilegeMode::M) {
2409
+ # there is no translation in M-mode
2410
+ result.paddr = vaddr;
2411
+ return result;
2412
+ }
2413
+
2414
+ SatpMode translation_mode =
2415
+ current_translation_mode(effective_mode);
2416
+
2417
+ if (translation_mode == SatpMode::Reserved) {
2418
+ if (op == MemoryOperation::Read) {
2419
+ raise (ExceptionCode::LoadPageFault, mode(), vaddr);
2420
+ } else if (op == MemoryOperation::Write || op == MemoryOperation::ReadModifyWrite) {
2421
+ raise (ExceptionCode::StoreAmoPageFault, mode(), vaddr);
2422
+ } else {
2423
+ assert(op == MemoryOperation::Fetch, "Unexpected memory operation");
2424
+ raise (ExceptionCode::InstructionPageFault, mode(), vaddr);
2425
+ }
2426
+ }
2427
+
2428
+
2429
+ if (translation_mode == SatpMode::Bare) {
2430
+ result.paddr = vaddr;
2431
+ } else if (xlen() == 32 && translation_mode == SatpMode::Sv32) {
2432
+ # Sv32 page table walk
2433
+ result = stage1_page_walk<32, 34, 32, 2>(vaddr, op, effective_mode, encoding);
2434
+ } else if (xlen() == 64 && translation_mode == SatpMode::Sv39) {
2435
+ # Sv39 page table walk
2436
+ result = stage1_page_walk<39, 56, 64, 3>(vaddr, op, effective_mode, encoding);
2437
+ } else if (xlen() == 64 && translation_mode == SatpMode::Sv48) {
2438
+ # Sv48 page table walk
2439
+ result = stage1_page_walk<48, 56, 64, 4>(vaddr, op, effective_mode, encoding);
2440
+ } else if (xlen() == 64 && translation_mode == SatpMode::Sv57) {
2441
+ # Sv57 page table walk
2442
+ result = stage1_page_walk<57, 56, 64, 5>(vaddr, op, effective_mode, encoding);
2443
+ } else {
2444
+ assert(false, "Unexpected SatpMode");
2445
+ }
2446
+
2447
+ maybe_cache_translation(vaddr, op, result);
2448
+ return result;
2449
+ }
2450
+ }
2451
+
2452
+ function canonical_vaddr? {
2453
+ returns Boolean
2454
+ arguments XReg vaddr
2455
+ description {
2456
+ Returns whether or not _vaddr_ is a valid (_i.e._, canonical) virtual address.
2457
+
2458
+ If pointer masking (S**pm) is enabled, then vaddr will be masked before checking
2459
+ the canonical address.
2460
+ }
2461
+ body {
2462
+ if (CSR[misa].S == 1'b0) {
2463
+ # there is no translation, any address is canonical
2464
+ return true;
2465
+ }
2466
+
2467
+ # canonical depends on the virtual address size in the current translation mode
2468
+ SatpMode satp_mode;
2469
+ if (virtual_mode?()) {
2470
+ satp_mode = $enum(SatpMode, CSR[vsatp].MODE);
2471
+ } else {
2472
+ satp_mode = $enum(SatpMode, CSR[satp].MODE);
2473
+ }
2474
+
2475
+ # calculate the effective address after pointer masking
2476
+ XReg eaddr = mask_eaddr(vaddr);
2477
+
2478
+ if (SATP_MODE_BARE && (satp_mode == SatpMode::Bare)) {
2479
+ return true;
2480
+ } else if ((MXLEN == 32) && satp_mode == SatpMode::Sv32) {
2481
+ # Sv32 uses all 32 bits of the VA
2482
+ return true;
2483
+ } else if ((MXLEN == 64) && satp_mode == SatpMode::Sv39) {
2484
+ return eaddr[63:39] == {25{eaddr[38]}};
2485
+ } else if ((MXLEN == 64) && satp_mode == SatpMode::Sv48) {
2486
+ return eaddr[63:48] == {16{eaddr[47]}};
2487
+ } else if ((MXLEN == 64) && satp_mode == SatpMode::Sv57) {
2488
+ return eaddr[63:57] == {6{eaddr[56]}};
2489
+ }
2490
+ }
2491
+ }
2492
+
2493
+ function canonical_gpaddr? {
2494
+ returns Boolean
2495
+ arguments XReg gpaddr
2496
+ description {
2497
+ Returns whether or not +gpaddr+ is a valid (_i.e._, canonical) guest physical address.
2498
+ }
2499
+ body {
2500
+
2501
+ # canonical depends on the virtual address size in the current translation mode
2502
+ SatpMode satp_mode = $enum(SatpMode, CSR[satp].MODE);
2503
+
2504
+ if (satp_mode == SatpMode::Bare) {
2505
+ return true;
2506
+ } else if (satp_mode == SatpMode::Sv32) {
2507
+ # Sv32 uses all 32 bits of the VA
2508
+ return true;
2509
+ } else if ((MXLEN > 32) && (satp_mode == SatpMode::Sv39)) {
2510
+ return gpaddr[63:39] == {25{gpaddr[38]}};
2511
+ } else if ((MXLEN > 32) && (satp_mode == SatpMode::Sv48)) {
2512
+ return gpaddr[63:48] == {16{gpaddr[47]}};
2513
+ } else if ((MXLEN > 32) && (satp_mode == SatpMode::Sv57)) {
2514
+ return gpaddr[63:57] == {6{gpaddr[56]}};
2515
+ }
2516
+ }
2517
+ }
2518
+
2519
+ function misaligned_is_atomic? {
2520
+ template U32 N
2521
+ returns Boolean
2522
+ arguments Bits<PHYS_ADDR_WIDTH> physical_address
2523
+ description {
2524
+ Returns true if an access starting at +physical_address+ that is +N+ bits long is atomic.
2525
+
2526
+ This function takes into account any Atomicity Granule PMAs, so *it should not be used
2527
+ for load-reserved/store-conditional*, since those PMAs do not apply to those accesses.
2528
+ }
2529
+ body {
2530
+ # if the hart doesn't support Misligned Atomicity Granules,
2531
+ # then this misligned access is not atomic
2532
+ return false if MISALIGNED_MAX_ATOMICITY_GRANULE_SIZE == 0;
2533
+
2534
+ if (pma_applies?(PmaAttribute::MAG16, physical_address, N) &&
2535
+ in_naturally_aligned_region?<128>(physical_address, N)) {
2536
+ return true;
2537
+ } else if (pma_applies?(PmaAttribute::MAG8, physical_address, N) &&
2538
+ in_naturally_aligned_region?<64>(physical_address, N)) {
2539
+ return true;
2540
+ } else if (pma_applies?(PmaAttribute::MAG4, physical_address, N) &&
2541
+ in_naturally_aligned_region?<32>(physical_address, N)) {
2542
+ return true;
2543
+ } else if (pma_applies?(PmaAttribute::MAG2, physical_address, N) &&
2544
+ in_naturally_aligned_region?<16>(physical_address, N)) {
2545
+ return true;
2546
+ } else {
2547
+ # not saved by a Misaligned Atomicity Granule
2548
+ return false;
2549
+ }
2550
+ }
2551
+ }
2552
+
2553
+ function read_memory_aligned {
2554
+ template U32 LEN
2555
+ returns Bits<LEN>
2556
+ arguments
2557
+ XReg virtual_address,
2558
+ Bits<INSTR_ENC_SIZE> encoding # the encoding of an instruction causing this access
2559
+ description {
2560
+ Read from virtual memory using a known aligned address.
2561
+ }
2562
+ body {
2563
+ TranslationResult result;
2564
+
2565
+ if (CSR[misa].S == 1) {
2566
+ result = translate(virtual_address, MemoryOperation::Read, effective_ldst_mode(), encoding);
2567
+ } else {
2568
+ result.paddr = virtual_address;
2569
+ }
2570
+
2571
+ # may raise an exception
2572
+ access_check(result.paddr, LEN, virtual_address, MemoryOperation::Read, ExceptionCode::LoadAccessFault, effective_ldst_mode());
2573
+
2574
+ return read_physical_memory<LEN>(result.paddr);
2575
+ }
2576
+ }
2577
+
2578
+ function read_memory {
2579
+ template U32 LEN
2580
+ returns Bits<LEN>
2581
+ arguments
2582
+ XReg virtual_address,
2583
+ Bits<INSTR_ENC_SIZE> encoding # the encoding of an instruction causing this access, or 0 if a fetch
2584
+ description {
2585
+ Read from virtual memory.
2586
+
2587
+ }
2588
+ body {
2589
+ Boolean aligned = is_naturally_aligned<LEN>(virtual_address);
2590
+ XReg physical_address;
2591
+
2592
+ if (aligned) {
2593
+ return read_memory_aligned<LEN>(virtual_address, encoding);
2594
+ }
2595
+
2596
+ # access isn't naturally aligned, but it still might be atomic if this hart supports
2597
+ # Misliagned Atomicity Granules. We won't know that, though, until after translation since PMAs
2598
+ # apply to physical addresses
2599
+ if (MISALIGNED_MAX_ATOMICITY_GRANULE_SIZE > 0) {
2600
+ # sanity check that the implementation isn't expecting a Misaligned exception
2601
+ # before an access/page fault exception (that would be an invalid config)
2602
+ assert(MISALIGNED_LDST_EXCEPTION_PRIORITY == "low", "Invalid config: can't mix low-priority misaligned exceptions with large atomicity granule");
2603
+
2604
+ physical_address = (CSR[misa].S == 1)
2605
+ ? translate(virtual_address, MemoryOperation::Read, effective_ldst_mode(), encoding).paddr
2606
+ : virtual_address;
2607
+
2608
+ if (misaligned_is_atomic?<LEN>(physical_address)) {
2609
+ access_check(physical_address, LEN, virtual_address, MemoryOperation::Read, ExceptionCode::LoadAccessFault, effective_ldst_mode());
2610
+ return read_physical_memory<LEN>(physical_address);
2611
+ }
2612
+ }
2613
+
2614
+ # at this point, we have a misligned access
2615
+ if (!MISALIGNED_LDST) {
2616
+ # misaligned is not supported, we'll raise either a Misaligned exception or
2617
+ # a page/access fault exception, depending on the configuration
2618
+ if (MISALIGNED_LDST_EXCEPTION_PRIORITY == "low") {
2619
+ # do translation to trigger any access/page faults before raising misaligned
2620
+ physical_address = (CSR[misa].S == 1)
2621
+ ? translate(virtual_address, MemoryOperation::Read, effective_ldst_mode(), encoding).paddr
2622
+ : virtual_address;
2623
+ access_check(physical_address, LEN, virtual_address, MemoryOperation::Read, ExceptionCode::LoadAccessFault, effective_ldst_mode());
2624
+ }
2625
+ raise (ExceptionCode::LoadAddressMisaligned, mode(), virtual_address);
2626
+ } else {
2627
+
2628
+ # misaligned, must break into multiple reads
2629
+ if (MISALIGNED_SPLIT_STRATEGY == "sequential_bytes") {
2630
+ Bits<LEN> result = 0;
2631
+ for (U32 I = 0; I < (LEN/8); I++) {
2632
+ result = result | (read_memory_aligned<8>(virtual_address + I, encoding) `<< (8*I));
2633
+ }
2634
+ return result;
2635
+ } else if (MISALIGNED_SPLIT_STRATEGY == "custom") {
2636
+ unpredictable("An implementation is free to break a misaligned access any way, leading to unpredictable behavior when any part of the misaligned access causes an exception");
2637
+ }
2638
+ }
2639
+ }
2640
+ }
2641
+
2642
+ function read_memory_xlen {
2643
+ returns Bits<MXLEN>
2644
+ arguments
2645
+ XReg virtual_address,
2646
+ Bits<INSTR_ENC_SIZE> encoding
2647
+ description {
2648
+ Read XLEN bits from memory
2649
+ }
2650
+ body {
2651
+ if (xlen() == 32) {
2652
+ return read_memory<32>(virtual_address, encoding);
2653
+ } else {
2654
+ return read_memory<64>(virtual_address, encoding);
2655
+ }
2656
+ }
2657
+ }
2658
+
2659
+ function write_memory_xlen {
2660
+ arguments
2661
+ XReg virtual_address,
2662
+ Bits<MXLEN> value,
2663
+ Bits<INSTR_ENC_SIZE> encoding
2664
+ description {
2665
+ Read XLEN bits from memory
2666
+ }
2667
+ body {
2668
+ if (xlen() == 32) {
2669
+ return write_memory<32>(virtual_address, value, encoding);
2670
+ } else {
2671
+ return write_memory<64>(virtual_address, value, encoding);
2672
+ }
2673
+ }
2674
+ }
2675
+
2676
+ function read_memory_xlen_aligned {
2677
+ returns Bits<MXLEN>
2678
+ arguments
2679
+ XReg virtual_address,
2680
+ Bits<INSTR_ENC_SIZE> encoding # the encoding of an instruction causing this access, or 0 if a fetch
2681
+ description {
2682
+ Read from virtual memory XLEN (which may be runtime-determined) bits using a known aligned address.
2683
+ }
2684
+ body {
2685
+ TranslationResult result;
2686
+
2687
+ if (CSR[misa].S == 1) {
2688
+ result = translate(virtual_address, MemoryOperation::Read, effective_ldst_mode(), encoding);
2689
+ } else {
2690
+ result.paddr = virtual_address;
2691
+ }
2692
+
2693
+ # may raise an exception
2694
+ access_check(result.paddr, xlen(), virtual_address, MemoryOperation::Read, ExceptionCode::LoadAccessFault, effective_ldst_mode());
2695
+
2696
+ if (xlen() == 32) {
2697
+ return read_physical_memory<32>(result.paddr);
2698
+ } else {
2699
+ return read_physical_memory<64>(result.paddr);
2700
+ }
2701
+ }
2702
+ }
2703
+
2704
+ # hart-global state to track the local reservation set
2705
+ Boolean reservation_set_valid = false;
2706
+ XReg reservation_set_address;
2707
+ XReg reservation_set_size;
2708
+ XReg reservation_physical_address; # The exact address used by the LR.W/LR.D
2709
+ XReg reservation_virtual_address; # The exact address used by the LR.W/LR.D
2710
+ XReg reservation_size; # the size of the LR operation (32 or 64)
2711
+
2712
+ function invalidate_reservation_set {
2713
+ description {
2714
+ Invalidates any currently held reservation set.
2715
+
2716
+ [NOTE]
2717
+ --
2718
+ This function may be called by the platform, independent of any actions
2719
+ occurring in the local hart, for any or no reason.
2720
+
2721
+ The platform *must* call this function if an external hart or device accesses
2722
+ part of this reservation set while reservation_set_valid could be true.
2723
+ --
2724
+ }
2725
+ body {
2726
+ reservation_set_valid = false;
2727
+ }
2728
+ }
2729
+
2730
+ function register_reservation_set {
2731
+ arguments
2732
+ Bits<MXLEN> physical_address, # The (always aligned) physical address to reserve.
2733
+ Bits<MXLEN> length # minimum length of the reservation. actual reservation may be larger
2734
+ description {
2735
+ Register a reservation for a physical address range that subsumes
2736
+ [physical_address, physical_address + N).
2737
+ }
2738
+ body {
2739
+ reservation_set_valid = true;
2740
+ reservation_set_address = physical_address;
2741
+
2742
+ if (LRSC_RESERVATION_STRATEGY == "reserve naturally-aligned 64-byte region") {
2743
+ reservation_set_address = physical_address & ~MXLEN'h3f;
2744
+ reservation_set_size = 64;
2745
+ } else if (LRSC_RESERVATION_STRATEGY == "reserve naturally-aligned 128-byte region") {
2746
+ reservation_set_address = physical_address & ~MXLEN'h7f;
2747
+ reservation_set_size = 128;
2748
+ } else if (LRSC_RESERVATION_STRATEGY == "reserve exactly enough to cover the access") {
2749
+ reservation_set_address = physical_address;
2750
+ reservation_set_size = length;
2751
+ } else if (LRSC_RESERVATION_STRATEGY == "custom") {
2752
+ unpredictable("Implementations may set reservation sets of any size, as long as they cover the reserved accessed");
2753
+ } else {
2754
+ assert(false, "Unexpected LRSC_RESERVATION_STRATEGY");
2755
+ }
2756
+ }
2757
+ }
2758
+
2759
+ function load_reserved {
2760
+ template U32 N # the number of bits being loaded
2761
+ returns Bits<N> # the value of memory at virtual_address
2762
+ arguments
2763
+ Bits<MXLEN> virtual_address, # the virtual address to load
2764
+ Bits<1> aq, # acquire semantics? 0=no, 1=yes
2765
+ Bits<1> rl, # release semantics? 0=no, 1=yes
2766
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
2767
+ description {
2768
+ Register a reservation for virtual_address at least N bits long
2769
+ and read the value from memory.
2770
+
2771
+ If aq is set, then also perform a memory model acquire.
2772
+
2773
+ If rl is set, then also perform a memory model release (software is discouraged from doing so).
2774
+
2775
+ This function assumes alignment checks have already occurred.
2776
+ }
2777
+ body {
2778
+ Bits<PHYS_ADDR_WIDTH> physical_address =
2779
+ (CSR[misa].S == 1)
2780
+ ? translate(virtual_address, MemoryOperation::Read, effective_ldst_mode(), encoding).paddr
2781
+ : virtual_address;
2782
+
2783
+ if (pma_applies?(PmaAttribute::RsrvNone, physical_address, N)) {
2784
+ raise(ExceptionCode::LoadAccessFault, mode(), virtual_address);
2785
+ }
2786
+
2787
+ if (aq == 1) {
2788
+ memory_model_acquire();
2789
+ }
2790
+ if (rl == 1) {
2791
+ memory_model_release();
2792
+ }
2793
+
2794
+ register_reservation_set(physical_address, N);
2795
+
2796
+ if (CSR[misa].S ==1 && LRSC_FAIL_ON_VA_SYNONYM) {
2797
+ # also need to remember the virtual address
2798
+ reservation_virtual_address = virtual_address;
2799
+ }
2800
+
2801
+ return read_memory_aligned<N>(physical_address, encoding);
2802
+ }
2803
+ }
2804
+
2805
+ function store_conditional {
2806
+ template U32 N # number of bits being stored
2807
+ returns Boolean # whether or not the store conditional succeeded
2808
+ arguments
2809
+ Bits<MXLEN> virtual_address, # the virtual address to store to
2810
+ Bits<MXLEN> value, # the value to store
2811
+ Bits<1> aq, # acquire semantics? 0=no, 1=yes
2812
+ Bits<1> rl, # release semantics? 0=no, 1=yes
2813
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
2814
+ description {
2815
+ Atomically check the reservation set to ensure:
2816
+
2817
+ * it is valid
2818
+ * it covers the region addressed by this store
2819
+ * the address setting the reservation set matches virtual address
2820
+
2821
+ If the preceding are met, perform the store and return 0.
2822
+ Otherwise, return 1.
2823
+ }
2824
+ body {
2825
+ Bits<PHYS_ADDR_WIDTH> physical_address =
2826
+ (CSR[misa].S == 1)
2827
+ ? translate(virtual_address, MemoryOperation::Write, effective_ldst_mode(), encoding).paddr
2828
+ : virtual_address;
2829
+
2830
+ if (pma_applies?(PmaAttribute::RsrvNone, physical_address, N)) {
2831
+ raise(ExceptionCode::StoreAmoAccessFault, mode(), virtual_address);
2832
+ }
2833
+
2834
+ # failed SC still looks like a store to memory protection
2835
+ access_check(physical_address, N, virtual_address, MemoryOperation::Write, ExceptionCode::StoreAmoAccessFault, effective_ldst_mode());
2836
+
2837
+ # acquire/release occur regardless of whether or not the SC succeeds
2838
+ if (aq == 1) {
2839
+ memory_model_acquire();
2840
+ }
2841
+ if (rl == 1) {
2842
+ memory_model_release();
2843
+ }
2844
+
2845
+ if (reservation_set_valid == false) {
2846
+ return false;
2847
+ }
2848
+
2849
+ if (!contains?(reservation_set_address, reservation_set_size, physical_address, N)) {
2850
+ # this access is not in the reservation set
2851
+ invalidate_reservation_set();
2852
+ return false;
2853
+ }
2854
+
2855
+ if (LRSC_FAIL_ON_NON_EXACT_LRSC) {
2856
+ if (reservation_physical_address != physical_address || reservation_size != N) {
2857
+ # this access does not match the most recent LR
2858
+ invalidate_reservation_set();
2859
+ return false;
2860
+ }
2861
+ }
2862
+
2863
+ if (LRSC_FAIL_ON_VA_SYNONYM) {
2864
+ if (reservation_virtual_address != virtual_address || reservation_size != N) {
2865
+ # this access does not match the most recent LR
2866
+ invalidate_reservation_set();
2867
+ return false;
2868
+ }
2869
+ }
2870
+
2871
+ # success. perform the store
2872
+ write_physical_memory<N>(physical_address, value);
2873
+
2874
+ return true;
2875
+ }
2876
+ }
2877
+
2878
+ function amo {
2879
+ template U32 N # number of bits being loaded/stored
2880
+ returns Bits<N>
2881
+ arguments
2882
+ XReg virtual_address, # the virtual address to load from/store to
2883
+ Bits<N> value, # the value for the second half of the atomic operation
2884
+ AmoOperation op, # atomic operation to apply
2885
+ Bits<1> aq, # acquire semantics? 0=no, 1=yes
2886
+ Bits<1> rl, # release semantics? 0=no, 1=yes
2887
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
2888
+ description {
2889
+ Atomically read-modify-write the location at virtual_address.
2890
+
2891
+ The value written to virtual_address will depend on +op+.
2892
+
2893
+ If +aq+ is 1, then the amo also acts as a memory model acquire.
2894
+ If +rl+ is 1, then the amo also acts as a memory model release.
2895
+ }
2896
+ body {
2897
+ Boolean aligned = is_naturally_aligned<N>(virtual_address);
2898
+
2899
+ if (!aligned && MISALIGNED_LDST_EXCEPTION_PRIORITY == "high") {
2900
+ raise(ExceptionCode::StoreAmoAddressMisaligned, mode(), virtual_address);
2901
+ }
2902
+
2903
+ Bits<PHYS_ADDR_WIDTH> physical_address =
2904
+ (CSR[misa].S == 1)
2905
+ ? translate(virtual_address, MemoryOperation::ReadModifyWrite, effective_ldst_mode(), encoding).paddr
2906
+ : virtual_address;
2907
+
2908
+ # PMA Atomicity checks
2909
+ if (pma_applies?(PmaAttribute::AmoNone, physical_address, N)) {
2910
+ raise(ExceptionCode::StoreAmoAccessFault, mode(), virtual_address);
2911
+ } else if (((op == AmoOperation::Add || op == AmoOperation::Max || op == AmoOperation::Maxu || op == AmoOperation::Min || op == AmoOperation::Minu)) &&
2912
+ !pma_applies?(PmaAttribute::AmoArithmetic, physical_address, N)) {
2913
+ raise(ExceptionCode::StoreAmoAccessFault, mode(), virtual_address);
2914
+ } else if (((op == AmoOperation::And || op == AmoOperation::Or || op == AmoOperation::Xor)) &&
2915
+ !pma_applies?(PmaAttribute::AmoLogical, physical_address, N)) {
2916
+ raise(ExceptionCode::StoreAmoAccessFault, mode(), virtual_address);
2917
+ } else {
2918
+ assert(
2919
+ pma_applies?(PmaAttribute::AmoSwap, physical_address, N) &&
2920
+ op == AmoOperation::Swap,
2921
+ "Bad AMO operation"
2922
+ );
2923
+ }
2924
+
2925
+ # pma alignment checks
2926
+ if (!aligned &&
2927
+ !misaligned_is_atomic?<N>(physical_address)) {
2928
+ raise (ExceptionCode::StoreAmoAddressMisaligned, mode(), virtual_address);
2929
+ }
2930
+
2931
+ if (N == 32) {
2932
+ return atomic_read_modify_write_32(physical_address, value, op);
2933
+ } else {
2934
+ return atomic_read_modify_write_64(physical_address, value, op);
2935
+ }
2936
+
2937
+ }
2938
+ }
2939
+
2940
+
2941
+
2942
+ function write_memory_aligned {
2943
+ template U32 LEN
2944
+ arguments
2945
+ XReg virtual_address,
2946
+ Bits<LEN> value,
2947
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
2948
+ description {
2949
+ Write to virtual memory using a known aligned address.
2950
+ }
2951
+ body {
2952
+ XReg physical_address;
2953
+
2954
+ physical_address = (CSR[misa].S == 1)
2955
+ ? translate(virtual_address, MemoryOperation::Write, effective_ldst_mode(), encoding).paddr
2956
+ : virtual_address;
2957
+
2958
+ # may raise an exception
2959
+ access_check(physical_address, LEN, virtual_address, MemoryOperation::Write, ExceptionCode::StoreAmoAccessFault, effective_ldst_mode());
2960
+
2961
+ write_physical_memory<LEN>(physical_address, value);
2962
+ }
2963
+ }
2964
+
2965
+ function write_memory {
2966
+ template U32 LEN
2967
+ arguments
2968
+ XReg virtual_address,
2969
+ Bits<LEN> value,
2970
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
2971
+ description {
2972
+ Write to virtual memory
2973
+ }
2974
+ body {
2975
+ Boolean aligned = is_naturally_aligned<LEN>(virtual_address);
2976
+ XReg physical_address;
2977
+
2978
+ if (aligned) {
2979
+ write_memory_aligned<LEN>(virtual_address, value, encoding);
2980
+ return;
2981
+ }
2982
+
2983
+ # access isn't naturally aligned, but it still might be atomic if this hart supports
2984
+ # Misliagned Atomicity Granules. We won't know that, though, until after translation since PMAs
2985
+ # apply to physical addresses
2986
+ if (MISALIGNED_MAX_ATOMICITY_GRANULE_SIZE > 0) {
2987
+ # sanity check that the implementation isn't expecting a Misaligned exception
2988
+ # before an access/page fault exception (that would be an invalid config)
2989
+ assert(MISALIGNED_LDST_EXCEPTION_PRIORITY == "low", "Invalid config: can't mix low-priority misaligned exceptions with large atomicity granule");
2990
+
2991
+ physical_address = (CSR[misa].S == 1)
2992
+ ? translate(virtual_address, MemoryOperation::Write, effective_ldst_mode(), encoding).paddr
2993
+ : virtual_address;
2994
+
2995
+ if (misaligned_is_atomic?<LEN>(physical_address)) {
2996
+ access_check(physical_address, LEN, virtual_address, MemoryOperation::Write, ExceptionCode::StoreAmoAccessFault, effective_ldst_mode());
2997
+ write_physical_memory<LEN>(physical_address, value);
2998
+ return;
2999
+ }
3000
+ }
3001
+
3002
+ # at this point, we have a misligned access that must be split
3003
+ if (!MISALIGNED_LDST) {
3004
+ # misaligned is not supported, we'll raise either a Misaligned exception or
3005
+ # a page/access fault exception, depending on the configuration
3006
+ if (MISALIGNED_LDST_EXCEPTION_PRIORITY == "low") {
3007
+ # do translation to trigger any access/page faults before raising misaligned
3008
+ physical_address = (CSR[misa].S == 1)
3009
+ ? translate(virtual_address, MemoryOperation::Write, effective_ldst_mode(), encoding).paddr
3010
+ : virtual_address;
3011
+ access_check(physical_address, LEN, virtual_address, MemoryOperation::Write, ExceptionCode::StoreAmoAccessFault, effective_ldst_mode());
3012
+ }
3013
+ raise (ExceptionCode::StoreAmoAddressMisaligned, mode(), virtual_address);
3014
+ } else {
3015
+ # misaligned, must break into multiple reads
3016
+ if (MISALIGNED_SPLIT_STRATEGY == "sequential_bytes") {
3017
+ for (U32 I = 0; I < (LEN/8); I++) {
3018
+ write_memory_aligned<8>(virtual_address + I, (value >> (8*I))[7:0], encoding);
3019
+ }
3020
+ } else if (MISALIGNED_SPLIT_STRATEGY == "custom") {
3021
+ unpredictable("An implementation is free to break a misaligned access any way, leading to unpredictable behavior when any part of the misaligned access causes an exception");
3022
+ }
3023
+ }
3024
+ }
3025
+ }
3026
+
3027
+ function write_memory_xlen_aligned {
3028
+ arguments
3029
+ XReg virtual_address,
3030
+ Bits<MXLEN> value,
3031
+ Bits<INSTR_ENC_SIZE> encoding # encoding of the instruction causing this access
3032
+ description {
3033
+ Write to virtual memory XLEN bits (which may be runtime determined) using a known aligned address.
3034
+ }
3035
+ body {
3036
+ XReg physical_address;
3037
+
3038
+ physical_address = (CSR[misa].S == 1)
3039
+ ? translate(virtual_address, MemoryOperation::Write, effective_ldst_mode(), encoding).paddr
3040
+ : virtual_address;
3041
+
3042
+ # may raise an exception
3043
+ access_check(physical_address, xlen(), virtual_address, MemoryOperation::Write, ExceptionCode::StoreAmoAccessFault, effective_ldst_mode());
3044
+
3045
+ if (xlen() == 32) {
3046
+ write_physical_memory<32>(physical_address, value);
3047
+ } else {
3048
+ write_physical_memory<64>(physical_address, value);
3049
+ }
3050
+ }
3051
+ }
3052
+
3053
+ function mstatus_sd_has_known_reset
3054
+ {
3055
+ returns Boolean
3056
+ description {
3057
+ Returns true if the mstatus.SD bit has a defined reset value, as determined by various parameters.
3058
+ }
3059
+ body {
3060
+ # the reset value is known if both FS and VS are known
3061
+
3062
+ Boolean fs_has_single_value =
3063
+ ((!implemented?(ExtensionName::F)) || ($array_size(MSTATUS_FS_LEGAL_VALUES) == 1));
3064
+
3065
+ Boolean vs_has_single_value =
3066
+ ((!implemented?(ExtensionName::V)) || ($array_size(MSTATUS_VS_LEGAL_VALUES) == 1));
3067
+
3068
+ return fs_has_single_value && vs_has_single_value;
3069
+ }
3070
+ }
3071
+
3072
+ function mstatus_sd_reset_value
3073
+ {
3074
+ returns Bits<1>
3075
+ description {
3076
+ Returns the reset value of mstatus.SD when known
3077
+ }
3078
+ body {
3079
+ # the reset value is known if both FS and VS are known
3080
+ assert(mstatus_sd_has_known_reset(),
3081
+ "mstatus_sd_reset_value is only defined when mstatus_sd_has_known_reset() == true");
3082
+
3083
+ Bits<2> fs_value, vs_value; # defaults to 0
3084
+
3085
+ if ((!implemented?(ExtensionName::F)) || ($array_size(MSTATUS_FS_LEGAL_VALUES) == 1)) {
3086
+ fs_value = (!implemented?(ExtensionName::F)) ? 0 : MSTATUS_FS_LEGAL_VALUES[0];
3087
+ }
3088
+ if ((!implemented?(ExtensionName::V)) || ($array_size(MSTATUS_VS_LEGAL_VALUES) == 1)) {
3089
+ fs_value = (!implemented?(ExtensionName::V)) ? 0 : MSTATUS_VS_LEGAL_VALUES[0];
3090
+ }
3091
+
3092
+ return ((fs_value == 3) || (vs_value == 3)) ? 1 : 0;
3093
+ }
3094
+ }
3095
+
3096
+ function check_zcmt_enabled {
3097
+ arguments
3098
+ Bits<INSTR_ENC_SIZE> encoding
3099
+ description {
3100
+ If the Smstateen extension is implemented, then bit 2 in `mstateen0`, `sstateen0`, and `hstateen0` is
3101
+ implemented. If bit 2 of a controlling `stateen0` CSR is zero, then access to the `jvt` CSR and execution
3102
+ of a `cm.jalt` or `cm.jt` instruction by a lower privilege level results in an illegal-instruction trap (or, if
3103
+ appropriate, a virtual-instruction trap).
3104
+ }
3105
+ body {
3106
+ if (( mode() != PrivilegeMode::M && implemented?(ExtensionName::Smstateen)
3107
+ && CSR[mstateen0].JVT == 1'b0 )
3108
+ ||
3109
+ ( mode() == PrivilegeMode::U && implemented?(ExtensionName::Ssstateen)
3110
+ && CSR[sstateen0].JVT == 1'b0 )) {
3111
+
3112
+ raise(ExceptionCode::IllegalInstruction, mode(), encoding);
3113
+ }
3114
+ else
3115
+ if (( mode() == PrivilegeMode::VS && implemented?(ExtensionName::Ssstateen)
3116
+ && CSR[hstateen0].JVT == 1'b0 )
3117
+ ||
3118
+ ( mode() == PrivilegeMode::VU && implemented?(ExtensionName::Ssstateen)
3119
+ && (CSR[sstateen0].JVT == 1'b0 || CSR[hstateen0].JVT == 1'b0) )) {
3120
+
3121
+ raise(ExceptionCode::VirtualInstruction, mode(), encoding);
3122
+ }
3123
+ }
3124
+ }