udb 0.1.9 → 0.1.14

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 (414) hide show
  1. checksums.yaml +4 -4
  2. data/.data/cfgs/example_rv64_with_overlay.yaml +20 -20
  3. data/.data/cfgs/mc100-32-full-example.yaml +1 -0
  4. data/.data/cfgs/profile/README.adoc +10 -0
  5. data/.data/cfgs/profile/RVA20S64.yaml +26 -6
  6. data/.data/cfgs/profile/RVA20U64.yaml +18 -4
  7. data/.data/cfgs/profile/RVA22S64.yaml +27 -7
  8. data/.data/cfgs/profile/RVA22U64.yaml +18 -4
  9. data/.data/cfgs/profile/RVA23S64.yaml +61 -7
  10. data/.data/cfgs/profile/RVA23U64.yaml +36 -4
  11. data/.data/cfgs/profile/RVB23S64.yaml +27 -7
  12. data/.data/cfgs/profile/RVB23U64.yaml +18 -4
  13. data/.data/cfgs/profile/RVI20U32.yaml +10 -4
  14. data/.data/cfgs/profile/RVI20U64.yaml +10 -4
  15. data/.data/cfgs/qc_iu.yaml +8 -1
  16. data/.data/cfgs/rv32-riscv-tests.yaml +6 -2
  17. data/.data/cfgs/rv32-vector.yaml +6 -2
  18. data/.data/cfgs/rv64-riscv-tests.yaml +6 -2
  19. data/.data/cfgs/rv64-vector.yaml +6 -2
  20. data/.data/spec/custom/isa/qc_iu/csr/Smrnmi/mnepc.yaml +17 -0
  21. data/.data/spec/custom/isa/qc_iu/csr/Xqccmi/qc.itba.yaml +45 -0
  22. data/.data/spec/custom/isa/qc_iu/csr/Xqccmi/qc.itdec.yaml +39 -0
  23. data/.data/spec/custom/isa/qc_iu/csr/jvt.yaml +11 -0
  24. data/.data/spec/custom/isa/qc_iu/csr/mepc.yaml +16 -0
  25. data/.data/spec/custom/isa/qc_iu/ext/Xqccmi.yaml +290 -0
  26. data/.data/spec/custom/isa/qc_iu/ext/Xqccmt.yaml +127 -0
  27. data/.data/spec/custom/isa/qc_iu/inst/Xqccmi/qc.cm.ilut.yaml +136 -0
  28. data/.data/spec/custom/isa/qc_iu/inst/Xqccmt/qc.cm.jalt.yaml +84 -0
  29. data/.data/spec/custom/isa/qc_iu/inst/Xqccmt/qc.cm.jt.yaml +60 -0
  30. data/.data/spec/custom/isa/qc_iu/isa/globals.isa +134 -0
  31. data/.data/spec/schemas/config_schema.json +220 -27
  32. data/.data/spec/schemas/csr_schema.json +0 -6
  33. data/.data/spec/schemas/ext_schema.json +80 -24
  34. data/.data/spec/schemas/inst_schema.json +0 -3
  35. data/.data/spec/schemas/mmr_schema.json +3 -3
  36. data/.data/spec/schemas/profile_release_schema.json +1 -1
  37. data/.data/spec/schemas/profile_schema.json +0 -3
  38. data/.data/spec/schemas/register_file_schema.json +8 -3
  39. data/.data/spec/schemas/schema_defs.json +13 -27
  40. data/.data/spec/std/isa/csr/H/henvcfg.yaml +25 -0
  41. data/.data/spec/std/isa/csr/I/pmpaddr0.yaml +6 -4
  42. data/.data/spec/std/isa/csr/I/pmpaddr1.yaml +6 -4
  43. data/.data/spec/std/isa/csr/I/pmpaddr10.yaml +6 -4
  44. data/.data/spec/std/isa/csr/I/pmpaddr11.yaml +6 -4
  45. data/.data/spec/std/isa/csr/I/pmpaddr12.yaml +6 -4
  46. data/.data/spec/std/isa/csr/I/pmpaddr13.yaml +6 -4
  47. data/.data/spec/std/isa/csr/I/pmpaddr14.yaml +6 -4
  48. data/.data/spec/std/isa/csr/I/pmpaddr15.yaml +6 -4
  49. data/.data/spec/std/isa/csr/I/pmpaddr16.yaml +6 -4
  50. data/.data/spec/std/isa/csr/I/pmpaddr17.yaml +6 -4
  51. data/.data/spec/std/isa/csr/I/pmpaddr18.yaml +6 -4
  52. data/.data/spec/std/isa/csr/I/pmpaddr19.yaml +6 -4
  53. data/.data/spec/std/isa/csr/I/pmpaddr2.yaml +6 -4
  54. data/.data/spec/std/isa/csr/I/pmpaddr20.yaml +6 -4
  55. data/.data/spec/std/isa/csr/I/pmpaddr21.yaml +6 -4
  56. data/.data/spec/std/isa/csr/I/pmpaddr22.yaml +6 -4
  57. data/.data/spec/std/isa/csr/I/pmpaddr23.yaml +6 -4
  58. data/.data/spec/std/isa/csr/I/pmpaddr24.yaml +6 -4
  59. data/.data/spec/std/isa/csr/I/pmpaddr25.yaml +6 -4
  60. data/.data/spec/std/isa/csr/I/pmpaddr26.yaml +6 -4
  61. data/.data/spec/std/isa/csr/I/pmpaddr27.yaml +6 -4
  62. data/.data/spec/std/isa/csr/I/pmpaddr28.yaml +6 -4
  63. data/.data/spec/std/isa/csr/I/pmpaddr29.yaml +6 -4
  64. data/.data/spec/std/isa/csr/I/pmpaddr3.yaml +6 -4
  65. data/.data/spec/std/isa/csr/I/pmpaddr30.yaml +6 -4
  66. data/.data/spec/std/isa/csr/I/pmpaddr31.yaml +6 -4
  67. data/.data/spec/std/isa/csr/I/pmpaddr32.yaml +6 -4
  68. data/.data/spec/std/isa/csr/I/pmpaddr33.yaml +6 -4
  69. data/.data/spec/std/isa/csr/I/pmpaddr34.yaml +6 -4
  70. data/.data/spec/std/isa/csr/I/pmpaddr35.yaml +6 -4
  71. data/.data/spec/std/isa/csr/I/pmpaddr36.yaml +6 -4
  72. data/.data/spec/std/isa/csr/I/pmpaddr37.yaml +6 -4
  73. data/.data/spec/std/isa/csr/I/pmpaddr38.yaml +6 -4
  74. data/.data/spec/std/isa/csr/I/pmpaddr39.yaml +6 -4
  75. data/.data/spec/std/isa/csr/I/pmpaddr4.yaml +6 -4
  76. data/.data/spec/std/isa/csr/I/pmpaddr40.yaml +6 -4
  77. data/.data/spec/std/isa/csr/I/pmpaddr41.yaml +6 -4
  78. data/.data/spec/std/isa/csr/I/pmpaddr42.yaml +6 -4
  79. data/.data/spec/std/isa/csr/I/pmpaddr43.yaml +6 -4
  80. data/.data/spec/std/isa/csr/I/pmpaddr44.yaml +6 -4
  81. data/.data/spec/std/isa/csr/I/pmpaddr45.yaml +6 -4
  82. data/.data/spec/std/isa/csr/I/pmpaddr46.yaml +6 -4
  83. data/.data/spec/std/isa/csr/I/pmpaddr47.yaml +6 -4
  84. data/.data/spec/std/isa/csr/I/pmpaddr48.yaml +6 -4
  85. data/.data/spec/std/isa/csr/I/pmpaddr49.yaml +6 -4
  86. data/.data/spec/std/isa/csr/I/pmpaddr5.yaml +6 -4
  87. data/.data/spec/std/isa/csr/I/pmpaddr50.yaml +6 -4
  88. data/.data/spec/std/isa/csr/I/pmpaddr51.yaml +6 -4
  89. data/.data/spec/std/isa/csr/I/pmpaddr52.yaml +6 -4
  90. data/.data/spec/std/isa/csr/I/pmpaddr53.yaml +6 -4
  91. data/.data/spec/std/isa/csr/I/pmpaddr54.yaml +6 -4
  92. data/.data/spec/std/isa/csr/I/pmpaddr55.yaml +6 -4
  93. data/.data/spec/std/isa/csr/I/pmpaddr56.yaml +6 -4
  94. data/.data/spec/std/isa/csr/I/pmpaddr57.yaml +6 -4
  95. data/.data/spec/std/isa/csr/I/pmpaddr58.yaml +6 -4
  96. data/.data/spec/std/isa/csr/I/pmpaddr59.yaml +6 -4
  97. data/.data/spec/std/isa/csr/I/pmpaddr6.yaml +6 -4
  98. data/.data/spec/std/isa/csr/I/pmpaddr60.yaml +6 -4
  99. data/.data/spec/std/isa/csr/I/pmpaddr61.yaml +6 -4
  100. data/.data/spec/std/isa/csr/I/pmpaddr62.yaml +6 -4
  101. data/.data/spec/std/isa/csr/I/pmpaddr63.yaml +6 -4
  102. data/.data/spec/std/isa/csr/I/pmpaddr7.yaml +6 -4
  103. data/.data/spec/std/isa/csr/I/pmpaddr8.yaml +6 -4
  104. data/.data/spec/std/isa/csr/I/pmpaddr9.yaml +6 -4
  105. data/.data/spec/std/isa/csr/I/pmpaddrN.layout +6 -4
  106. data/.data/spec/std/isa/csr/I/pmpcfg0.yaml +128 -152
  107. data/.data/spec/std/isa/csr/I/pmpcfg1.yaml +64 -76
  108. data/.data/spec/std/isa/csr/I/pmpcfg10.yaml +128 -152
  109. data/.data/spec/std/isa/csr/I/pmpcfg11.yaml +64 -76
  110. data/.data/spec/std/isa/csr/I/pmpcfg12.yaml +128 -152
  111. data/.data/spec/std/isa/csr/I/pmpcfg13.yaml +64 -76
  112. data/.data/spec/std/isa/csr/I/pmpcfg14.yaml +128 -152
  113. data/.data/spec/std/isa/csr/I/pmpcfg15.yaml +64 -76
  114. data/.data/spec/std/isa/csr/I/pmpcfg2.yaml +128 -152
  115. data/.data/spec/std/isa/csr/I/pmpcfg3.yaml +64 -76
  116. data/.data/spec/std/isa/csr/I/pmpcfg4.yaml +128 -152
  117. data/.data/spec/std/isa/csr/I/pmpcfg5.yaml +64 -76
  118. data/.data/spec/std/isa/csr/I/pmpcfg6.yaml +128 -152
  119. data/.data/spec/std/isa/csr/I/pmpcfg7.yaml +64 -76
  120. data/.data/spec/std/isa/csr/I/pmpcfg8.yaml +128 -152
  121. data/.data/spec/std/isa/csr/I/pmpcfg9.yaml +64 -76
  122. data/.data/spec/std/isa/csr/I/pmpcfgN.layout +16 -19
  123. data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.layout +6 -2
  124. data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.yaml +6 -2
  125. data/.data/spec/std/isa/csr/hstatus.yaml +16 -0
  126. data/.data/spec/std/isa/csr/jvt.yaml +1 -0
  127. data/.data/spec/std/isa/csr/mcycleh.yaml +1 -1
  128. data/.data/spec/std/isa/csr/menvcfg.yaml +20 -0
  129. data/.data/spec/std/isa/csr/misa.yaml +0 -12
  130. data/.data/spec/std/isa/csr/mstatus.yaml +46 -6
  131. data/.data/spec/std/isa/csr/mstatush.yaml +17 -15
  132. data/.data/spec/std/isa/csr/senvcfg.yaml +42 -0
  133. data/.data/spec/std/isa/csr/sstatus.yaml +12 -0
  134. data/.data/spec/std/isa/csr/vsstatus.yaml +24 -0
  135. data/.data/spec/std/isa/ext/A.yaml +5 -7
  136. data/.data/spec/std/isa/ext/S.yaml +12 -0
  137. data/.data/spec/std/isa/ext/Smpmpmt.yaml +52 -0
  138. data/.data/spec/std/isa/ext/Sv32.yaml +7 -19
  139. data/.data/spec/std/isa/ext/Sv39.yaml +7 -19
  140. data/.data/spec/std/isa/ext/Sv48.yaml +4 -20
  141. data/.data/spec/std/isa/ext/Sv57.yaml +4 -20
  142. data/.data/spec/std/isa/ext/Svukte.yaml +71 -0
  143. data/.data/spec/std/isa/ext/Zawrs.yaml +1 -1
  144. data/.data/spec/std/isa/ext/Zihpm.yaml +0 -12
  145. data/.data/spec/std/isa/inst/B/andn.yaml +10 -12
  146. data/.data/spec/std/isa/inst/B/clmul.yaml +9 -11
  147. data/.data/spec/std/isa/inst/B/clmulh.yaml +9 -11
  148. data/.data/spec/std/isa/inst/B/orn.yaml +9 -11
  149. data/.data/spec/std/isa/inst/B/rev8.yaml +1 -1
  150. data/.data/spec/std/isa/inst/B/rol.yaml +9 -11
  151. data/.data/spec/std/isa/inst/B/rolw.yaml +9 -11
  152. data/.data/spec/std/isa/inst/B/ror.yaml +9 -11
  153. data/.data/spec/std/isa/inst/B/rorw.yaml +9 -11
  154. data/.data/spec/std/isa/inst/B/xnor.yaml +9 -11
  155. data/.data/spec/std/isa/inst/C/c.addi.yaml +1 -0
  156. data/.data/spec/std/isa/inst/C/c.addi16sp.yaml +1 -0
  157. data/.data/spec/std/isa/inst/C/c.addiw.yaml +1 -0
  158. data/.data/spec/std/isa/inst/C/c.andi.yaml +1 -0
  159. data/.data/spec/std/isa/inst/C/c.ldsp.yaml +4 -4
  160. data/.data/spec/std/isa/inst/C/c.li.yaml +1 -0
  161. data/.data/spec/std/isa/inst/C/c.lui.yaml +1 -0
  162. data/.data/spec/std/isa/inst/C/c.mv.yaml +1 -1
  163. data/.data/spec/std/isa/inst/C/c.sdsp.yaml +1 -1
  164. data/.data/spec/std/isa/inst/D/fsgnj.d.yaml +3 -0
  165. data/.data/spec/std/isa/inst/D/fsgnjn.d.yaml +3 -0
  166. data/.data/spec/std/isa/inst/D/fsgnjx.d.yaml +3 -0
  167. data/.data/spec/std/isa/inst/F/fadd.s.yaml +5 -5
  168. data/.data/spec/std/isa/inst/F/fclass.s.yaml +2 -2
  169. data/.data/spec/std/isa/inst/F/fcvt.l.s.yaml +1 -1
  170. data/.data/spec/std/isa/inst/F/fcvt.lu.s.yaml +1 -1
  171. data/.data/spec/std/isa/inst/F/fcvt.s.l.yaml +1 -1
  172. data/.data/spec/std/isa/inst/F/fcvt.s.lu.yaml +1 -1
  173. data/.data/spec/std/isa/inst/F/fcvt.s.w.yaml +1 -1
  174. data/.data/spec/std/isa/inst/F/fcvt.s.wu.yaml +1 -1
  175. data/.data/spec/std/isa/inst/F/fcvt.w.s.yaml +1 -1
  176. data/.data/spec/std/isa/inst/F/fcvt.wu.s.yaml +1 -1
  177. data/.data/spec/std/isa/inst/F/fdiv.s.yaml +1 -1
  178. data/.data/spec/std/isa/inst/F/feq.s.yaml +2 -2
  179. data/.data/spec/std/isa/inst/F/fle.s.yaml +2 -2
  180. data/.data/spec/std/isa/inst/F/fleq.s.yaml +2 -2
  181. data/.data/spec/std/isa/inst/F/flt.s.yaml +2 -2
  182. data/.data/spec/std/isa/inst/F/fltq.s.yaml +2 -2
  183. data/.data/spec/std/isa/inst/F/flw.yaml +2 -2
  184. data/.data/spec/std/isa/inst/F/fmadd.s.yaml +1 -1
  185. data/.data/spec/std/isa/inst/F/fmax.s.yaml +6 -6
  186. data/.data/spec/std/isa/inst/F/fmin.s.yaml +6 -6
  187. data/.data/spec/std/isa/inst/F/fmsub.s.yaml +1 -1
  188. data/.data/spec/std/isa/inst/F/fmul.s.yaml +1 -1
  189. data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +2 -2
  190. data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +1 -1
  191. data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +2 -2
  192. data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +1 -1
  193. data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +4 -4
  194. data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +3 -3
  195. data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +4 -4
  196. data/.data/spec/std/isa/inst/F/fsqrt.s.yaml +1 -1
  197. data/.data/spec/std/isa/inst/F/fsub.s.yaml +1 -1
  198. data/.data/spec/std/isa/inst/F/fsw.yaml +1 -1
  199. data/.data/spec/std/isa/inst/I/addi.yaml +2 -1
  200. data/.data/spec/std/isa/inst/I/addiw.yaml +2 -1
  201. data/.data/spec/std/isa/inst/I/andi.yaml +2 -1
  202. data/.data/spec/std/isa/inst/I/auipc.yaml +1 -0
  203. data/.data/spec/std/isa/inst/I/beq.yaml +1 -1
  204. data/.data/spec/std/isa/inst/I/bge.yaml +4 -2
  205. data/.data/spec/std/isa/inst/I/bgeu.yaml +3 -0
  206. data/.data/spec/std/isa/inst/I/blt.yaml +4 -2
  207. data/.data/spec/std/isa/inst/I/bltu.yaml +3 -0
  208. data/.data/spec/std/isa/inst/I/bne.yaml +1 -1
  209. data/.data/spec/std/isa/inst/I/lb.yaml +1 -0
  210. data/.data/spec/std/isa/inst/I/lbu.yaml +1 -0
  211. data/.data/spec/std/isa/inst/I/ld.yaml +2 -0
  212. data/.data/spec/std/isa/inst/I/lh.yaml +1 -0
  213. data/.data/spec/std/isa/inst/I/lhu.yaml +1 -0
  214. data/.data/spec/std/isa/inst/I/lui.yaml +1 -0
  215. data/.data/spec/std/isa/inst/I/lw.yaml +1 -0
  216. data/.data/spec/std/isa/inst/I/lwu.yaml +1 -0
  217. data/.data/spec/std/isa/inst/I/ori.yaml +1 -0
  218. data/.data/spec/std/isa/inst/I/sb.yaml +1 -0
  219. data/.data/spec/std/isa/inst/I/sd.yaml +1 -0
  220. data/.data/spec/std/isa/inst/I/sh.yaml +1 -0
  221. data/.data/spec/std/isa/inst/I/slt.yaml +2 -2
  222. data/.data/spec/std/isa/inst/I/slti.yaml +1 -0
  223. data/.data/spec/std/isa/inst/I/sltiu.yaml +2 -1
  224. data/.data/spec/std/isa/inst/I/sltu.yaml +1 -1
  225. data/.data/spec/std/isa/inst/I/sub.yaml +1 -1
  226. data/.data/spec/std/isa/inst/I/subw.yaml +1 -1
  227. data/.data/spec/std/isa/inst/I/sw.yaml +1 -0
  228. data/.data/spec/std/isa/inst/I/xori.yaml +2 -1
  229. data/.data/spec/std/isa/inst/M/mul.yaml +0 -19
  230. data/.data/spec/std/isa/inst/Q/fsgnj.q.yaml +1 -1
  231. data/.data/spec/std/isa/inst/S/sret.yaml +3 -1
  232. data/.data/spec/std/isa/inst/V/vadc.vim.yaml +1 -0
  233. data/.data/spec/std/isa/inst/V/vadd.vi.yaml +1 -0
  234. data/.data/spec/std/isa/inst/V/vadd.vv.yaml +1 -5
  235. data/.data/spec/std/isa/inst/V/vand.vi.yaml +1 -0
  236. data/.data/spec/std/isa/inst/V/vfsgnjn.vv.yaml +3 -0
  237. data/.data/spec/std/isa/inst/V/vfsgnjx.vv.yaml +3 -0
  238. data/.data/spec/std/isa/inst/V/vl1re8.v.yaml +3 -0
  239. data/.data/spec/std/isa/inst/V/vl2re8.v.yaml +3 -0
  240. data/.data/spec/std/isa/inst/V/vl4re8.v.yaml +3 -0
  241. data/.data/spec/std/isa/inst/V/vl8re8.v.yaml +3 -0
  242. data/.data/spec/std/isa/inst/V/vle8.v.yaml +4 -8
  243. data/.data/spec/std/isa/inst/V/vmadc.vi.yaml +1 -0
  244. data/.data/spec/std/isa/inst/V/vmadc.vim.yaml +1 -0
  245. data/.data/spec/std/isa/inst/V/vmand.mm.yaml +3 -0
  246. data/.data/spec/std/isa/inst/V/vmerge.vim.yaml +1 -0
  247. data/.data/spec/std/isa/inst/V/vmfle.vv.yaml +3 -0
  248. data/.data/spec/std/isa/inst/V/vmflt.vv.yaml +3 -0
  249. data/.data/spec/std/isa/inst/V/vmnand.mm.yaml +3 -0
  250. data/.data/spec/std/isa/inst/V/vmseq.vi.yaml +1 -0
  251. data/.data/spec/std/isa/inst/V/vmsgt.vi.yaml +4 -0
  252. data/.data/spec/std/isa/inst/V/vmsgtu.vi.yaml +4 -0
  253. data/.data/spec/std/isa/inst/V/vmsle.vi.yaml +4 -0
  254. data/.data/spec/std/isa/inst/V/vmsle.vv.yaml +3 -0
  255. data/.data/spec/std/isa/inst/V/vmsleu.vi.yaml +4 -0
  256. data/.data/spec/std/isa/inst/V/vmsleu.vv.yaml +3 -0
  257. data/.data/spec/std/isa/inst/V/vmslt.vv.yaml +3 -0
  258. data/.data/spec/std/isa/inst/V/vmsltu.vv.yaml +3 -0
  259. data/.data/spec/std/isa/inst/V/vmsne.vi.yaml +1 -0
  260. data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +2 -13
  261. data/.data/spec/std/isa/inst/V/vmv.x.s.yaml +1 -1
  262. data/.data/spec/std/isa/inst/V/vmxnor.mm.yaml +3 -0
  263. data/.data/spec/std/isa/inst/V/vmxor.mm.yaml +3 -0
  264. data/.data/spec/std/isa/inst/V/vnsrl.wx.yaml +3 -0
  265. data/.data/spec/std/isa/inst/V/vor.vi.yaml +1 -0
  266. data/.data/spec/std/isa/inst/V/vrsub.vi.yaml +1 -0
  267. data/.data/spec/std/isa/inst/V/vrsub.vx.yaml +3 -0
  268. data/.data/spec/std/isa/inst/V/vsadd.vi.yaml +1 -0
  269. data/.data/spec/std/isa/inst/V/vsaddu.vi.yaml +1 -0
  270. data/.data/spec/std/isa/inst/V/vse8.v.yaml +4 -4
  271. data/.data/spec/std/isa/inst/V/vwadd.vx.yaml +3 -0
  272. data/.data/spec/std/isa/inst/V/vwaddu.vx.yaml +3 -0
  273. data/.data/spec/std/isa/inst/V/vxor.vi.yaml +4 -0
  274. data/.data/spec/std/isa/inst/Zalasr/lSIZE.AQRL.layout +40 -5
  275. data/.data/spec/std/isa/inst/Zalasr/lb.aq.yaml +17 -1
  276. data/.data/spec/std/isa/inst/Zalasr/lb.aqrl.yaml +17 -1
  277. data/.data/spec/std/isa/inst/Zalasr/ld.aq.yaml +17 -1
  278. data/.data/spec/std/isa/inst/Zalasr/ld.aqrl.yaml +17 -1
  279. data/.data/spec/std/isa/inst/Zalasr/lh.aq.yaml +17 -1
  280. data/.data/spec/std/isa/inst/Zalasr/lh.aqrl.yaml +17 -1
  281. data/.data/spec/std/isa/inst/Zalasr/lw.aq.yaml +17 -1
  282. data/.data/spec/std/isa/inst/Zalasr/lw.aqrl.yaml +17 -1
  283. data/.data/spec/std/isa/inst/Zalasr/sSIZE.AQRL.layout +46 -5
  284. data/.data/spec/std/isa/inst/Zalasr/sb.aqrl.yaml +16 -1
  285. data/.data/spec/std/isa/inst/Zalasr/sb.rl.yaml +16 -1
  286. data/.data/spec/std/isa/inst/Zalasr/sd.aqrl.yaml +16 -1
  287. data/.data/spec/std/isa/inst/Zalasr/sd.rl.yaml +16 -1
  288. data/.data/spec/std/isa/inst/Zalasr/sh.aqrl.yaml +16 -1
  289. data/.data/spec/std/isa/inst/Zalasr/sh.rl.yaml +16 -1
  290. data/.data/spec/std/isa/inst/Zalasr/sw.aqrl.yaml +16 -1
  291. data/.data/spec/std/isa/inst/Zalasr/sw.rl.yaml +16 -1
  292. data/.data/spec/std/isa/inst/Zawrs/wrs.nto.yaml +4 -2
  293. data/.data/spec/std/isa/inst/Zba/add.uw.yaml +9 -11
  294. data/.data/spec/std/isa/inst/Zbb/orc.b.yaml +1 -1
  295. data/.data/spec/std/isa/inst/Zbkb/brev8.yaml +3 -3
  296. data/.data/spec/std/isa/inst/Zbkb/packw.yaml +1 -1
  297. data/.data/spec/std/isa/inst/Zbkb/unzip.yaml +2 -2
  298. data/.data/spec/std/isa/inst/Zbkb/zip.yaml +2 -2
  299. data/.data/spec/std/isa/inst/Zbkx/xperm4.yaml +2 -2
  300. data/.data/spec/std/isa/inst/Zbkx/xperm8.yaml +2 -2
  301. data/.data/spec/std/isa/inst/Zcd/c.fld.yaml +1 -1
  302. data/.data/spec/std/isa/inst/Zcd/c.fldsp.yaml +1 -1
  303. data/.data/spec/std/isa/inst/Zcd/c.fsdsp.yaml +1 -1
  304. data/.data/spec/std/isa/inst/Zcf/c.flwsp.yaml +1 -1
  305. data/.data/spec/std/isa/inst/Zcf/c.fswsp.yaml +1 -1
  306. data/.data/spec/std/isa/inst/Zcmp/cm.pop.yaml +1 -1
  307. data/.data/spec/std/isa/inst/Zcmp/cm.popret.yaml +1 -1
  308. data/.data/spec/std/isa/inst/Zcmp/cm.popretz.yaml +1 -1
  309. data/.data/spec/std/isa/inst/Zcmp/cm.push.yaml +2 -3
  310. data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +1 -1
  311. data/.data/spec/std/isa/inst/Zfh/fcvt.h.s.yaml +6 -6
  312. data/.data/spec/std/isa/inst/Zfh/fcvt.s.h.yaml +5 -5
  313. data/.data/spec/std/isa/inst/Zfh/flh.yaml +1 -1
  314. data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +1 -1
  315. data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +1 -1
  316. data/.data/spec/std/isa/inst/Zfh/fsh.yaml +1 -1
  317. data/.data/spec/std/isa/inst/Zicbop/prefetch.i.yaml +2 -0
  318. data/.data/spec/std/isa/inst/Zicbop/prefetch.r.yaml +2 -0
  319. data/.data/spec/std/isa/inst/Zicbop/prefetch.w.yaml +2 -0
  320. data/.data/spec/std/isa/inst/Zicsr/csrrc.yaml +1 -1
  321. data/.data/spec/std/isa/inst/Zicsr/csrrci.yaml +1 -1
  322. data/.data/spec/std/isa/inst/Zicsr/csrrs.yaml +2 -2
  323. data/.data/spec/std/isa/inst/Zicsr/csrrsi.yaml +1 -1
  324. data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +1 -1
  325. data/.data/spec/std/isa/inst/Zicsr/csrrwi.yaml +1 -1
  326. data/.data/spec/std/isa/inst/Zks/sm3p0.yaml +1 -1
  327. data/.data/spec/std/isa/inst/Zks/sm3p1.yaml +1 -1
  328. data/.data/spec/std/isa/inst/Zks/sm4ed.yaml +1 -1
  329. data/.data/spec/std/isa/inst/Zks/sm4ks.yaml +1 -1
  330. data/.data/spec/std/isa/isa/builtin_functions.idl +18 -0
  331. data/.data/spec/std/isa/isa/fp.idl +1 -5
  332. data/.data/spec/std/isa/isa/globals.isa +72 -21
  333. data/.data/spec/std/isa/isa/interrupts.idl +1 -0
  334. data/.data/spec/std/isa/isa/vec.idl +1 -2
  335. data/.data/spec/std/isa/manual_version/isa/20240411/isa_20240411.yaml +5 -5
  336. data/.data/spec/std/isa/param/COUNTINHIBIT_EN.yaml +8 -2
  337. data/.data/spec/std/isa/param/HSTATEEN_CONTEXT_TYPE.yaml +1 -0
  338. data/.data/spec/std/isa/param/JVT_BASE_MASK.yaml +1 -1
  339. data/.data/spec/std/isa/param/MCOUNTINHIBIT_IMPLEMENTED.yaml +25 -0
  340. data/.data/spec/std/isa/param/MSTATEEN_CONTEXT_TYPE.yaml +1 -0
  341. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_DIRECT.yaml +1 -0
  342. data/.data/spec/std/isa/param/MTVEC_BASE_ALIGNMENT_VECTORED.yaml +1 -0
  343. data/.data/spec/std/isa/param/MTVEC_MODES.yaml +10 -3
  344. data/.data/spec/std/isa/param/NUM_PMP_ENTRIES.yaml +11 -22
  345. data/.data/spec/std/isa/param/NUM_USABLE_PMP_ENTRIES.yaml +35 -0
  346. data/.data/spec/std/isa/param/PMP_NA4_SUPPORTED.yaml +23 -0
  347. data/.data/spec/std/isa/param/PMP_NAPOT_SUPPORTED.yaml +19 -0
  348. data/.data/spec/std/isa/param/{MSTATUS_TVM_IMPLEMENTED.yaml → PMP_TOR_SUPPORTED.yaml} +6 -6
  349. data/.data/spec/std/isa/param/PRECISE_SYNCHRONOUS_EXCEPTIONS.yaml +1 -0
  350. data/.data/spec/std/isa/param/TRAP_ON_EBREAK.yaml +1 -0
  351. data/.data/spec/std/isa/param/TRAP_ON_ECALL_FROM_M.yaml +1 -0
  352. data/.data/spec/std/isa/param/TRAP_ON_SFENCE_VMA_WHEN_SATP_MODE_IS_READ_ONLY.yaml +1 -0
  353. data/.data/spec/std/isa/param/VLEN.yaml +2 -0
  354. data/.data/spec/std/isa/param/ZAWRS_NTO_IS_NOP.yaml +19 -0
  355. data/.data/spec/std/isa/profile/RVA20S64.yaml +11 -4
  356. data/.data/spec/std/isa/profile/RVA20U64.yaml +14 -5
  357. data/.data/spec/std/isa/profile/RVA22S64.yaml +14 -3
  358. data/.data/spec/std/isa/profile/RVA22U64.yaml +8 -1
  359. data/.data/spec/std/isa/profile/RVA23S64.yaml +13 -0
  360. data/.data/spec/std/isa/profile/RVA23U64.yaml +15 -1
  361. data/.data/spec/std/isa/profile/RVB23S64.yaml +15 -3
  362. data/.data/spec/std/isa/profile/RVB23U64.yaml +8 -1
  363. data/.data/spec/std/isa/profile/RVI20U32.yaml +8 -1
  364. data/.data/spec/std/isa/profile/RVI20U64.yaml +7 -0
  365. data/.data/spec/std/isa/register_file/F.yaml +3 -2
  366. data/.data/spec/std/isa/register_file/V.yaml +2 -2
  367. data/.data/spec/std/isa/register_file/X.yaml +2 -1
  368. data/lib/udb/ESPRESSO_VERSION +1 -1
  369. data/lib/udb/architecture.rb +4 -25
  370. data/lib/udb/cfg_arch.rb +171 -59
  371. data/lib/udb/cli.rb +10 -1
  372. data/lib/udb/condition.rb +38 -37
  373. data/lib/udb/config.rb +86 -8
  374. data/lib/udb/doc_link.rb +3 -4
  375. data/lib/udb/logic.rb +29 -56
  376. data/lib/udb/obj/csr.rb +23 -5
  377. data/lib/udb/obj/csr_field.rb +36 -21
  378. data/lib/udb/obj/database_obj.rb +2 -5
  379. data/lib/udb/obj/extension.rb +0 -3
  380. data/lib/udb/obj/instruction.rb +2 -5
  381. data/lib/udb/obj/non_isa_specification.rb +22 -100
  382. data/lib/udb/obj/portfolio.rb +75 -20
  383. data/lib/udb/obj/profile.rb +0 -4
  384. data/lib/udb/obj/register_file.rb +63 -2
  385. data/lib/udb/portfolio_design.rb +3 -6
  386. data/lib/udb/resolver.rb +84 -23
  387. data/lib/udb/version.rb +1 -1
  388. data/lib/udb/version_spec.rb +8 -0
  389. data/lib/udb/z3.rb +25 -2
  390. data/lib/udb.rb +0 -3
  391. metadata +30 -38
  392. data/.data/cfgs/profile/RVA23M64.yaml +0 -159
  393. data/.data/cfgs/profile/RVB23M64.yaml +0 -149
  394. data/.data/spec/schemas/proc_cert_class_schema.json +0 -35
  395. data/.data/spec/schemas/proc_cert_model_schema.json +0 -336
  396. data/.data/spec/std/isa/proc_cert_class/AC.yaml +0 -13
  397. data/.data/spec/std/isa/proc_cert_class/MC.yaml +0 -13
  398. data/.data/spec/std/isa/proc_cert_class/RVI.yaml +0 -16
  399. data/.data/spec/std/isa/proc_cert_model/AC100.yaml +0 -72
  400. data/.data/spec/std/isa/proc_cert_model/AC200.yaml +0 -58
  401. data/.data/spec/std/isa/proc_cert_model/MC100-32.yaml +0 -155
  402. data/.data/spec/std/isa/proc_cert_model/MC100-64.yaml +0 -21
  403. data/.data/spec/std/isa/proc_cert_model/MC200-32.yaml +0 -60
  404. data/.data/spec/std/isa/proc_cert_model/MC200-64.yaml +0 -21
  405. data/.data/spec/std/isa/proc_cert_model/MC300-32.yaml +0 -40
  406. data/.data/spec/std/isa/proc_cert_model/MC300-64.yaml +0 -21
  407. data/.data/spec/std/isa/proc_cert_model/RVI20-32.yaml +0 -39
  408. data/.data/spec/std/isa/proc_cert_model/RVI20-64.yaml +0 -19
  409. data/.data/spec/std/isa/profile/RVA23M64.yaml +0 -24
  410. data/.data/spec/std/isa/profile/RVB23M64.yaml +0 -86
  411. data/lib/udb/cert_normative_rule.rb +0 -41
  412. data/lib/udb/obj/certifiable_obj.rb +0 -21
  413. data/lib/udb/obj/certificate.rb +0 -230
  414. data/lib/udb/proc_cert_design.rb +0 -77
@@ -20,6 +20,7 @@ encoding:
20
20
  variables:
21
21
  - name: imm
22
22
  location: 12|6-2
23
+ sign_extend: true
23
24
  - name: xd
24
25
  location: 9-7
25
26
  access:
@@ -34,7 +34,7 @@ encoding:
34
34
  left_shift: 3
35
35
  - name: xd
36
36
  location: 11-7
37
- not: [0, 1, 3, 5, 7]
37
+ not: [0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31]
38
38
  RV64:
39
39
  match: 011-----------10
40
40
  variables:
@@ -57,8 +57,8 @@ operation(): |
57
57
  Bits<64> value = read_memory(64, virtual_address, $encoding);
58
58
 
59
59
  if (xlen()== 64) {
60
- X[creg2reg(xd)] = value;
60
+ X[xd] = value;
61
61
  } else if (xlen() == 32) {
62
- X[creg2reg(xd)] = value[31:0];
63
- X[creg2reg(xd) + 1] = value[63:32];
62
+ X[xd] = value[31:0];
63
+ X[xd + 1] = value[63:32];
64
64
  }
@@ -20,6 +20,7 @@ encoding:
20
20
  variables:
21
21
  - name: imm
22
22
  location: 12|6-2
23
+ sign_extend: true
23
24
  - name: xd
24
25
  location: 11-7
25
26
  not: 0
@@ -22,6 +22,7 @@ encoding:
22
22
  - name: imm
23
23
  location: 12|6-2
24
24
  left_shift: 12
25
+ sign_extend: true
25
26
  - name: xd
26
27
  location: 11-7
27
28
  not: [0, 2]
@@ -9,7 +9,7 @@ name: c.mv
9
9
  long_name: Move Register
10
10
  description: |
11
11
  C.MV (move register) performs copy of the data in register xs2 to register xd
12
- C.MV expands to addi xd, x0, xs2.
12
+ C.MV expands to add xd, x0, xs2.
13
13
  definedBy:
14
14
  extension:
15
15
  name: Zca
@@ -27,7 +27,7 @@ encoding:
27
27
  variables:
28
28
  - name: xs2
29
29
  location: 6-2
30
- not: [1, 3, 5, 7]
30
+ not: [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31]
31
31
  - name: imm
32
32
  location: 9-7|12-10
33
33
  left_shift: 3
@@ -27,6 +27,9 @@ encoding:
27
27
  location: 19-15
28
28
  - name: fd
29
29
  location: 11-7
30
+ pseudoinstructions:
31
+ - when: fs1 == fs2
32
+ to: fmv.d fd, fs1
30
33
  access:
31
34
  s: always
32
35
  u: always
@@ -32,5 +32,8 @@ access:
32
32
  u: always
33
33
  vs: always
34
34
  vu: always
35
+ pseudoinstructions:
36
+ - when: fs1 == fs2
37
+ to: fneg.d fd, fs1
35
38
  data_independent_timing: false
36
39
  operation(): |
@@ -32,5 +32,8 @@ access:
32
32
  u: always
33
33
  vs: always
34
34
  vu: always
35
+ pseudoinstructions:
36
+ - when: fs1 == fs2
37
+ to: fabs.d fd, fs1
35
38
  data_independent_timing: false
36
39
  operation(): |
@@ -34,19 +34,19 @@ data_independent_timing: true
34
34
  operation(): |
35
35
  check_f_ok($encoding);
36
36
  RoundingMode mode = rm_to_mode(rm, $encoding);
37
- Bits<32> a = f[fs1];
38
- Bits<32> b = f[fs2];
37
+ Bits<32> a = F[fs1];
38
+ Bits<32> b = F[fs2];
39
39
 
40
40
  if (implemented?(ExtensionName::D)) {
41
41
  # check for incorrectly NaN-boxed inputs
42
- if (f[fs1][63:32] != 32'hffffffff) {
42
+ if (F[fs1][63:32] != 32'hffffffff) {
43
43
  a = SP_CANONICAL_NAN;
44
44
  }
45
- if (f[fs2][63:32] != 32'hffffffff) {
45
+ if (F[fs2][63:32] != 32'hffffffff) {
46
46
  b = SP_CANONICAL_NAN;
47
47
  }
48
48
  }
49
49
 
50
- f[fd] = f32_add(a, b, mode);
50
+ F[fd] = f32_add(a, b, mode);
51
51
 
52
52
  mark_f_state_dirty();
@@ -51,11 +51,11 @@ data_independent_timing: false
51
51
  operation(): |
52
52
  check_f_ok($encoding);
53
53
 
54
- Bits<32> sp_value = f[fs1][31:0];
54
+ Bits<32> sp_value = F[fs1][31:0];
55
55
 
56
56
  if (implemented?(ExtensionName::D)) {
57
57
  # check for an incorrectly NaN-boxed value
58
- if (f[fs1][63:32] != 32'hffffffff) {
58
+ if (F[fs1][63:32] != 32'hffffffff) {
59
59
  sp_value = SP_CANONICAL_NAN;
60
60
  }
61
61
  }
@@ -34,4 +34,4 @@ data_independent_timing: true
34
34
  operation(): |
35
35
  check_f_ok($encoding);
36
36
  RoundingMode rounding_mode = rm_to_mode(rm, $encoding);
37
- X[xd] = f32_to_i64(f[fs1], rounding_mode);
37
+ X[xd] = f32_to_i64(F[fs1], rounding_mode);
@@ -34,4 +34,4 @@ data_independent_timing: true
34
34
  operation(): |
35
35
  check_f_ok($encoding);
36
36
  RoundingMode rounding_mode = rm_to_mode(rm, $encoding);
37
- X[xd] = f32_to_ui64(f[fs1], rounding_mode);
37
+ X[xd] = f32_to_ui64(F[fs1], rounding_mode);
@@ -34,5 +34,5 @@ data_independent_timing: true
34
34
  operation(): |
35
35
  check_f_ok($encoding);
36
36
  RoundingMode rounding_mode = rm_to_mode(rm, $encoding);
37
- f[fd] = i64_to_f32(X[xs1], rounding_mode);
37
+ F[fd] = i64_to_f32(X[xs1], rounding_mode);
38
38
  mark_f_state_dirty();
@@ -33,5 +33,5 @@ data_independent_timing: true
33
33
  operation(): |
34
34
  check_f_ok($encoding);
35
35
  RoundingMode rounding_mode = rm_to_mode(rm, $encoding);
36
- f[fd] = ui64_to_f32(X[xs1], rounding_mode);
36
+ F[fd] = ui64_to_f32(X[xs1], rounding_mode);
37
37
  mark_f_state_dirty();
@@ -41,5 +41,5 @@ data_independent_timing: false
41
41
  operation(): |
42
42
  check_f_ok($encoding);
43
43
  RoundingMode rounding_mode = rm_to_mode(rm, $encoding);
44
- f[fd] = i32_to_f32(X[xs1], rounding_mode);
44
+ F[fd] = i32_to_f32(X[xs1], rounding_mode);
45
45
  mark_f_state_dirty();
@@ -41,5 +41,5 @@ data_independent_timing: true
41
41
  operation(): |
42
42
  check_f_ok($encoding);
43
43
  RoundingMode rounding_mode = rm_to_mode(rm, $encoding);
44
- f[fd] = ui32_to_f32(X[xs1], rounding_mode);
44
+ F[fd] = ui32_to_f32(X[xs1], rounding_mode);
45
45
  mark_f_state_dirty();
@@ -60,4 +60,4 @@ data_independent_timing: true
60
60
  operation(): |
61
61
  check_f_ok($encoding);
62
62
  RoundingMode rounding_mode = rm_to_mode(rm, $encoding);
63
- X[xd] = $signed(f32_to_i32(f[fs1], rounding_mode));
63
+ X[xd] = $signed(f32_to_i32(F[fs1], rounding_mode));
@@ -59,4 +59,4 @@ data_independent_timing: true
59
59
  operation(): |
60
60
  check_f_ok($encoding);
61
61
  RoundingMode rounding_mode = rm_to_mode(rm, $encoding);
62
- X[xd] = $signed(f32_to_ui32(f[fs1], rounding_mode));
62
+ X[xd] = $signed(f32_to_ui32(F[fs1], rounding_mode));
@@ -34,5 +34,5 @@ data_independent_timing: true
34
34
  operation(): |
35
35
  check_f_ok($encoding);
36
36
  RoundingMode mode = rm_to_mode(rm, $encoding);
37
- f[fd] = f32_div(f[fs1], f[fs2], mode);
37
+ F[fd] = f32_div(F[fs1], F[fs2], mode);
38
38
  mark_f_state_dirty();
@@ -34,8 +34,8 @@ data_independent_timing: true
34
34
  operation(): |
35
35
  check_f_ok($encoding);
36
36
 
37
- Bits<32> sp_value_a = f[fs1][31:0];
38
- Bits<32> sp_value_b = f[fs2][31:0];
37
+ Bits<32> sp_value_a = F[fs1][31:0];
38
+ Bits<32> sp_value_b = F[fs2][31:0];
39
39
 
40
40
  if (is_sp_nan?(sp_value_a) || is_sp_nan?(sp_value_b)) {
41
41
  if (is_sp_signaling_nan?(sp_value_a) || is_sp_signaling_nan?(sp_value_b)) {
@@ -34,8 +34,8 @@ data_independent_timing: true
34
34
  operation(): |
35
35
  check_f_ok($encoding);
36
36
 
37
- Bits<32> sp_value_a = f[fs1][31:0];
38
- Bits<32> sp_value_b = f[fs2][31:0];
37
+ Bits<32> sp_value_a = F[fs1][31:0];
38
+ Bits<32> sp_value_b = F[fs2][31:0];
39
39
  Bits<1> sign_a = sp_value_a[31];
40
40
  Bits<1> sign_b = sp_value_b[31];
41
41
 
@@ -32,8 +32,8 @@ data_independent_timing: true
32
32
  operation(): |
33
33
  check_f_ok($encoding);
34
34
 
35
- Bits<32> sp_value_a = f[fs1][31:0];
36
- Bits<32> sp_value_b = f[fs2][31:0];
35
+ Bits<32> sp_value_a = F[fs1][31:0];
36
+ Bits<32> sp_value_b = F[fs2][31:0];
37
37
 
38
38
  if (is_sp_nan?(sp_value_a) || is_sp_nan?(sp_value_b)) {
39
39
  # Quiet comparison: only set NV for signaling NaN
@@ -34,8 +34,8 @@ data_independent_timing: true
34
34
  operation(): |
35
35
  check_f_ok($encoding);
36
36
 
37
- Bits<32> sp_value_a = f[fs1][31:0];
38
- Bits<32> sp_value_b = f[fs2][31:0];
37
+ Bits<32> sp_value_a = F[fs1][31:0];
38
+ Bits<32> sp_value_b = F[fs2][31:0];
39
39
  Bits<1> sign_a = sp_value_a[31];
40
40
  Bits<1> sign_b = sp_value_b[31];
41
41
 
@@ -32,8 +32,8 @@ data_independent_timing: true
32
32
  operation(): |
33
33
  check_f_ok($encoding);
34
34
 
35
- Bits<32> sp_value_a = f[fs1][31:0];
36
- Bits<32> sp_value_b = f[fs2][31:0];
35
+ Bits<32> sp_value_a = F[fs1][31:0];
36
+ Bits<32> sp_value_b = F[fs2][31:0];
37
37
 
38
38
  if (is_sp_nan?(sp_value_a) || is_sp_nan?(sp_value_b)) {
39
39
  # Quiet comparison: only set NV for signaling NaN
@@ -38,9 +38,9 @@ operation(): |
38
38
  Bits<32> sp_value = read_memory(32, virtual_address, $encoding);
39
39
 
40
40
  if (implemented?(ExtensionName::D)) {
41
- f[fd] = nan_box(32, 64, sp_value);
41
+ F[fd] = nan_box(32, 64, sp_value);
42
42
  } else {
43
- f[fd] = sp_value;
43
+ F[fd] = sp_value;
44
44
  }
45
45
 
46
46
  mark_f_state_dirty();
@@ -35,5 +35,5 @@ data_independent_timing: true
35
35
  operation(): |
36
36
  check_f_ok($encoding);
37
37
  RoundingMode mode = rm_to_mode(rm, $encoding);
38
- f[fd] = f32_muladd(f[fs1], f[fs2], f[fs3], F32MulAddOp::Softfloat_mulAdd_addC, mode);
38
+ F[fd] = f32_muladd(F[fs1], F[fs2], F[fs3], F32MulAddOp::Softfloat_mulAdd_addC, mode);
39
39
  mark_f_state_dirty();
@@ -41,8 +41,8 @@ data_independent_timing: true
41
41
  operation(): |
42
42
  check_f_ok($encoding);
43
43
 
44
- Bits<32> sp_value_a = f[fs1][31:0];
45
- Bits<32> sp_value_b = f[fs2][31:0];
44
+ Bits<32> sp_value_a = F[fs1][31:0];
45
+ Bits<32> sp_value_b = F[fs2][31:0];
46
46
 
47
47
  if (is_sp_nan?(sp_value_a) || is_sp_nan?(sp_value_b)) {
48
48
  if (is_sp_signaling_nan?(sp_value_a) || is_sp_signaling_nan?(sp_value_b)) {
@@ -50,11 +50,11 @@ operation(): |
50
50
  }
51
51
  # If both are NaN, return canonical NaN; otherwise return the non-NaN operand
52
52
  if (is_sp_nan?(sp_value_a) && is_sp_nan?(sp_value_b)) {
53
- f[fd] = SP_CANONICAL_NAN;
53
+ F[fd] = SP_CANONICAL_NAN;
54
54
  } else if (is_sp_nan?(sp_value_a)) {
55
- f[fd] = sp_value_b;
55
+ F[fd] = sp_value_b;
56
56
  } else {
57
- f[fd] = sp_value_a;
57
+ F[fd] = sp_value_a;
58
58
  }
59
59
  } else {
60
60
  Boolean sign_a = sp_value_a[31] == 1;
@@ -66,6 +66,6 @@ operation(): |
66
66
  } else {
67
67
  a_lt_b = (sp_value_a != sp_value_b) && (sign_a != (sp_value_a < sp_value_b));
68
68
  }
69
- f[fd] = a_lt_b ? sp_value_b : sp_value_a;
69
+ F[fd] = a_lt_b ? sp_value_b : sp_value_a;
70
70
  }
71
71
  mark_f_state_dirty();
@@ -41,8 +41,8 @@ data_independent_timing: true
41
41
  operation(): |
42
42
  check_f_ok($encoding);
43
43
 
44
- Bits<32> sp_value_a = f[fs1][31:0];
45
- Bits<32> sp_value_b = f[fs2][31:0];
44
+ Bits<32> sp_value_a = F[fs1][31:0];
45
+ Bits<32> sp_value_b = F[fs2][31:0];
46
46
 
47
47
  if (is_sp_nan?(sp_value_a) || is_sp_nan?(sp_value_b)) {
48
48
  if (is_sp_signaling_nan?(sp_value_a) || is_sp_signaling_nan?(sp_value_b)) {
@@ -50,11 +50,11 @@ operation(): |
50
50
  }
51
51
  # If both are NaN, return canonical NaN; otherwise return the non-NaN operand
52
52
  if (is_sp_nan?(sp_value_a) && is_sp_nan?(sp_value_b)) {
53
- f[fd] = SP_CANONICAL_NAN;
53
+ F[fd] = SP_CANONICAL_NAN;
54
54
  } else if (is_sp_nan?(sp_value_a)) {
55
- f[fd] = sp_value_b;
55
+ F[fd] = sp_value_b;
56
56
  } else {
57
- f[fd] = sp_value_a;
57
+ F[fd] = sp_value_a;
58
58
  }
59
59
  } else {
60
60
  Boolean sign_a = sp_value_a[31] == 1;
@@ -66,6 +66,6 @@ operation(): |
66
66
  } else {
67
67
  a_lt_b = (sp_value_a != sp_value_b) && (sign_a != (sp_value_a < sp_value_b));
68
68
  }
69
- f[fd] = a_lt_b ? sp_value_a : sp_value_b;
69
+ F[fd] = a_lt_b ? sp_value_a : sp_value_b;
70
70
  }
71
71
  mark_f_state_dirty();
@@ -35,5 +35,5 @@ data_independent_timing: true
35
35
  operation(): |
36
36
  check_f_ok($encoding);
37
37
  RoundingMode mode = rm_to_mode(rm, $encoding);
38
- f[fd] = f32_muladd(f[fs1], f[fs2], f[fs3], F32MulAddOp::Softfloat_mulAdd_subC, mode);
38
+ F[fd] = f32_muladd(F[fs1], F[fs2], F[fs3], F32MulAddOp::Softfloat_mulAdd_subC, mode);
39
39
  mark_f_state_dirty();
@@ -34,5 +34,5 @@ data_independent_timing: true
34
34
  operation(): |
35
35
  check_f_ok($encoding);
36
36
  RoundingMode mode = rm_to_mode(rm, $encoding);
37
- f[fd] = f32_mul(f[fs1], f[fs2], mode);
37
+ F[fd] = f32_mul(F[fs1], F[fs2], mode);
38
38
  mark_f_state_dirty();
@@ -34,9 +34,9 @@ operation(): |
34
34
  Bits<32> sp_value = X[xs1][31:0];
35
35
 
36
36
  if (implemented?(ExtensionName::D)) {
37
- f[fd] = nan_box(32, 64, sp_value);
37
+ F[fd] = nan_box(32, 64, sp_value);
38
38
  } else {
39
- f[fd] = sp_value;
39
+ F[fd] = sp_value;
40
40
  }
41
41
 
42
42
  mark_f_state_dirty();
@@ -32,4 +32,4 @@ data_independent_timing: true
32
32
  operation(): |
33
33
  check_f_ok($encoding);
34
34
 
35
- X[xd] = sext(f[fs1][31:0], 32);
35
+ X[xd] = sext(F[fs1][31:0], 32);
@@ -38,6 +38,6 @@ operation(): |
38
38
  RoundingMode mode = rm_to_mode(rm, $encoding);
39
39
  # fnmadd: -(fs1 * fs2) - fs3 = -(fs1 * fs2) + (-fs3)
40
40
  # Negate fs3 by flipping its sign bit, then use subProd op
41
- Bits<32> fs3_negated = f[fs3][31:0] ^ 32'h80000000;
42
- f[fd] = f32_muladd(f[fs1], f[fs2], fs3_negated, F32MulAddOp::Softfloat_mulAdd_subProd, mode);
41
+ Bits<32> fs3_negated = F[fs3][31:0] ^ 32'h80000000;
42
+ F[fd] = f32_muladd(F[fs1], F[fs2], fs3_negated, F32MulAddOp::Softfloat_mulAdd_subProd, mode);
43
43
  mark_f_state_dirty();
@@ -36,5 +36,5 @@ data_independent_timing: true
36
36
  operation(): |
37
37
  check_f_ok($encoding);
38
38
  RoundingMode mode = rm_to_mode(rm, $encoding);
39
- f[fd] = f32_muladd(f[fs1], f[fs2], f[fs3], F32MulAddOp::Softfloat_mulAdd_subProd, mode);
39
+ F[fd] = f32_muladd(F[fs1], F[fs2], F[fs3], F32MulAddOp::Softfloat_mulAdd_subProd, mode);
40
40
  mark_f_state_dirty();
@@ -34,17 +34,17 @@ access:
34
34
  data_independent_timing: true
35
35
  pseudoinstructions:
36
36
  - when: (fs2 == fs1)
37
- to: fmv.s fd,fs1
37
+ to: fmv.s fd, fs1
38
38
 
39
39
  operation(): |
40
40
  check_f_ok($encoding);
41
41
 
42
- Bits<32> sp_value = {f[fs2][31], f[fs1][30:0]};
42
+ Bits<32> sp_value = {F[fs2][31], F[fs1][30:0]};
43
43
 
44
44
  if (implemented?(ExtensionName::D)) {
45
- f[fd] = nan_box(32, 64, sp_value);
45
+ F[fd] = nan_box(32, 64, sp_value);
46
46
  } else {
47
- f[fd] = sp_value;
47
+ F[fd] = sp_value;
48
48
  }
49
49
 
50
50
  mark_f_state_dirty();
@@ -38,12 +38,12 @@ pseudoinstructions:
38
38
  operation(): |
39
39
  check_f_ok($encoding);
40
40
 
41
- Bits<32> sp_value = {~f[fs2][31], f[fs1][30:0]};
41
+ Bits<32> sp_value = {~F[fs2][31], F[fs1][30:0]};
42
42
 
43
43
  if (implemented?(ExtensionName::D)) {
44
- f[fd] = nan_box(32, 64, sp_value);
44
+ F[fd] = nan_box(32, 64, sp_value);
45
45
  } else {
46
- f[fd] = sp_value;
46
+ F[fd] = sp_value;
47
47
  }
48
48
 
49
49
  mark_f_state_dirty();
@@ -33,16 +33,16 @@ access:
33
33
  data_independent_timing: true
34
34
  pseudoinstructions:
35
35
  - when: (fs2 == fs1)
36
- to: fabs.s fd,fs1
36
+ to: fabs.s fd, fs1
37
37
  operation(): |
38
38
  check_f_ok($encoding);
39
39
 
40
- Bits<32> sp_value = {f[fs1][31] ^ f[fs2][31], f[fs1][30:0]};
40
+ Bits<32> sp_value = {F[fs1][31] ^ F[fs2][31], F[fs1][30:0]};
41
41
 
42
42
  if (implemented?(ExtensionName::D)) {
43
- f[fd] = nan_box(32, 64, sp_value);
43
+ F[fd] = nan_box(32, 64, sp_value);
44
44
  } else {
45
- f[fd] = sp_value;
45
+ F[fd] = sp_value;
46
46
  }
47
47
 
48
48
  mark_f_state_dirty();
@@ -31,5 +31,5 @@ data_independent_timing: true
31
31
  operation(): |
32
32
  check_f_ok($encoding);
33
33
  RoundingMode mode = rm_to_mode(rm, $encoding);
34
- f[fd] = f32_sqrt(f[fs1], mode);
34
+ F[fd] = f32_sqrt(F[fs1], mode);
35
35
  mark_f_state_dirty();
@@ -33,4 +33,4 @@ data_independent_timing: true
33
33
  operation(): |
34
34
  check_f_ok($encoding);
35
35
  RoundingMode mode = rm_to_mode(rm, $encoding);
36
- f[fd] = f32_sub(f[fs1], f[fs2], mode);
36
+ F[fd] = f32_sub(F[fs1], F[fs2], mode);
@@ -35,4 +35,4 @@ operation(): |
35
35
 
36
36
  XReg virtual_address = X[xs1] + $signed(imm);
37
37
 
38
- write_memory(32, virtual_address, f[fs2][31:0], $encoding);
38
+ write_memory(32, virtual_address, F[fs2][31:0], $encoding);
@@ -19,6 +19,7 @@ encoding:
19
19
  variables:
20
20
  - name: imm
21
21
  location: 31-20
22
+ sign_extend: true
22
23
  - name: xs1
23
24
  location: 19-15
24
25
  - name: xd
@@ -33,5 +34,5 @@ pseudoinstructions:
33
34
  - when: (xd == 0 && xs1 == 0 && imm == 0)
34
35
  to: nop
35
36
  - when: imm == 0
36
- to: mv xd,xs1
37
+ to: mv xd, xs1
37
38
  operation(): X[xd] = X[xs1] + $signed(imm);
@@ -21,6 +21,7 @@ encoding:
21
21
  variables:
22
22
  - name: imm
23
23
  location: 31-20
24
+ sign_extend: true
24
25
  - name: xs1
25
26
  location: 19-15
26
27
  - name: xd
@@ -33,6 +34,6 @@ access:
33
34
  data_independent_timing: true
34
35
  pseudoinstructions:
35
36
  - when: imm == 0
36
- to: sext.w xd,xs1
37
+ to: sext.w xd, xs1
37
38
  operation(): |
38
39
  X[xd] = $signed((X[xs1] + $signed(imm))[31:0]);
@@ -17,6 +17,7 @@ encoding:
17
17
  variables:
18
18
  - name: imm
19
19
  location: 31-20
20
+ sign_extend: true
20
21
  - name: xs1
21
22
  location: 19-15
22
23
  - name: xd
@@ -29,5 +30,5 @@ access:
29
30
  data_independent_timing: true
30
31
  pseudoinstructions:
31
32
  - when: imm == 255
32
- to: zext.b xd,xs1
33
+ to: zext.b xd, xs1
33
34
  operation(): X[xd] = X[xs1] & $signed(imm);
@@ -18,6 +18,7 @@ encoding:
18
18
  - name: imm
19
19
  location: 31-12
20
20
  left_shift: 12
21
+ sign_extend: true
21
22
  - name: xd
22
23
  location: 11-7
23
24
  hints:
@@ -34,7 +34,7 @@ access:
34
34
  vu: always
35
35
  pseudoinstructions:
36
36
  - when: xs2 == 0
37
- to: beqz xs1,imm
37
+ to: beqz xs1, imm
38
38
  operation(): |
39
39
  XReg lhs = X[xs1];
40
40
  XReg rhs = X[xs2];
@@ -34,9 +34,11 @@ access:
34
34
  vu: always
35
35
  pseudoinstructions:
36
36
  - when: xs1 == 0
37
- to: blez xs2,imm
37
+ to: blez xs2, imm
38
38
  - when: xs2 == 0
39
- to: bgez xs1,imm
39
+ to: bgez xs1, imm
40
+ - when: "true"
41
+ to: ble xs2, xs1, imm
40
42
  operation(): |
41
43
  XReg lhs = X[xs1];
42
44
  XReg rhs = X[xs2];
@@ -32,6 +32,9 @@ access:
32
32
  u: always
33
33
  vs: always
34
34
  vu: always
35
+ pseudoinstructions:
36
+ - when: "true"
37
+ to: bleu xs2, xs1, imm
35
38
  operation(): |
36
39
  XReg lhs = X[xs1];
37
40
  XReg rhs = X[xs2];
@@ -34,9 +34,11 @@ access:
34
34
  vu: always
35
35
  pseudoinstructions:
36
36
  - when: xs2 == 0
37
- to: bltz xs1,imm
37
+ to: bltz xs1, imm
38
38
  - when: xs1 == 0
39
- to: bgtz xs2,imm
39
+ to: bgtz xs2, imm
40
+ - when: "true"
41
+ to: bgt xs2, xs1, imm
40
42
  operation(): |
41
43
  XReg lhs = X[xs1];
42
44
  XReg rhs = X[xs2];
@@ -32,6 +32,9 @@ access:
32
32
  u: always
33
33
  vs: always
34
34
  vu: always
35
+ pseudoinstructions:
36
+ - when: "true"
37
+ to: bgtu xs2, xs1, imm
35
38
  operation(): |
36
39
  XReg lhs = X[xs1];
37
40
  XReg rhs = X[xs2];
@@ -34,7 +34,7 @@ access:
34
34
  vu: always
35
35
  pseudoinstructions:
36
36
  - when: xs2 == 0
37
- to: bnez xs1,imm
37
+ to: bnez xs1, imm
38
38
  operation(): |
39
39
  XReg lhs = X[xs1];
40
40
  XReg rhs = X[xs2];
@@ -20,6 +20,7 @@ encoding:
20
20
  variables:
21
21
  - name: imm
22
22
  location: 31-20
23
+ sign_extend: true
23
24
  - name: xs1
24
25
  location: 19-15
25
26
  - name: xd
@@ -20,6 +20,7 @@ encoding:
20
20
  variables:
21
21
  - name: imm
22
22
  location: 31-20
23
+ sign_extend: true
23
24
  - name: xs1
24
25
  location: 19-15
25
26
  - name: xd