udb 0.1.9 → 0.1.13

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 (275) hide show
  1. checksums.yaml +4 -4
  2. data/.data/cfgs/example_rv64_with_overlay.yaml +5 -2
  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 +4 -1
  16. data/.data/cfgs/rv32-riscv-tests.yaml +2 -1
  17. data/.data/cfgs/rv32-vector.yaml +2 -1
  18. data/.data/cfgs/rv64-riscv-tests.yaml +2 -1
  19. data/.data/cfgs/rv64-vector.yaml +2 -1
  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 +219 -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 +153 -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 +112 -0
  31. data/.data/spec/schemas/config_schema.json +219 -26
  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/profile_release_schema.json +1 -1
  36. data/.data/spec/schemas/profile_schema.json +0 -3
  37. data/.data/spec/schemas/register_file_schema.json +8 -3
  38. data/.data/spec/schemas/schema_defs.json +8 -27
  39. data/.data/spec/std/isa/csr/I/pmpcfg0.yaml +8 -8
  40. data/.data/spec/std/isa/csr/I/pmpcfg1.yaml +4 -4
  41. data/.data/spec/std/isa/csr/I/pmpcfg10.yaml +8 -8
  42. data/.data/spec/std/isa/csr/I/pmpcfg11.yaml +4 -4
  43. data/.data/spec/std/isa/csr/I/pmpcfg12.yaml +8 -8
  44. data/.data/spec/std/isa/csr/I/pmpcfg13.yaml +4 -4
  45. data/.data/spec/std/isa/csr/I/pmpcfg14.yaml +8 -8
  46. data/.data/spec/std/isa/csr/I/pmpcfg15.yaml +4 -4
  47. data/.data/spec/std/isa/csr/I/pmpcfg2.yaml +8 -8
  48. data/.data/spec/std/isa/csr/I/pmpcfg3.yaml +4 -4
  49. data/.data/spec/std/isa/csr/I/pmpcfg4.yaml +8 -8
  50. data/.data/spec/std/isa/csr/I/pmpcfg5.yaml +4 -4
  51. data/.data/spec/std/isa/csr/I/pmpcfg6.yaml +8 -8
  52. data/.data/spec/std/isa/csr/I/pmpcfg7.yaml +4 -4
  53. data/.data/spec/std/isa/csr/I/pmpcfg8.yaml +8 -8
  54. data/.data/spec/std/isa/csr/I/pmpcfg9.yaml +4 -4
  55. data/.data/spec/std/isa/csr/I/pmpcfgN.layout +1 -1
  56. data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.layout +6 -2
  57. data/.data/spec/std/isa/csr/Zicntr/mcountinhibit.yaml +6 -2
  58. data/.data/spec/std/isa/csr/hstatus.yaml +16 -0
  59. data/.data/spec/std/isa/csr/mcycleh.yaml +1 -1
  60. data/.data/spec/std/isa/csr/misa.yaml +0 -12
  61. data/.data/spec/std/isa/csr/mstatus.yaml +38 -0
  62. data/.data/spec/std/isa/csr/mstatush.yaml +17 -15
  63. data/.data/spec/std/isa/csr/senvcfg.yaml +16 -0
  64. data/.data/spec/std/isa/csr/sstatus.yaml +12 -0
  65. data/.data/spec/std/isa/csr/vsstatus.yaml +24 -0
  66. data/.data/spec/std/isa/ext/A.yaml +5 -7
  67. data/.data/spec/std/isa/ext/S.yaml +12 -0
  68. data/.data/spec/std/isa/ext/Smpmpmt.yaml +52 -0
  69. data/.data/spec/std/isa/ext/Sv32.yaml +7 -19
  70. data/.data/spec/std/isa/ext/Sv39.yaml +7 -19
  71. data/.data/spec/std/isa/ext/Sv48.yaml +4 -20
  72. data/.data/spec/std/isa/ext/Sv57.yaml +4 -20
  73. data/.data/spec/std/isa/ext/Svukte.yaml +71 -0
  74. data/.data/spec/std/isa/ext/Zawrs.yaml +1 -1
  75. data/.data/spec/std/isa/ext/Zihpm.yaml +0 -12
  76. data/.data/spec/std/isa/inst/C/c.addi.yaml +1 -0
  77. data/.data/spec/std/isa/inst/C/c.addi16sp.yaml +1 -0
  78. data/.data/spec/std/isa/inst/C/c.addiw.yaml +1 -0
  79. data/.data/spec/std/isa/inst/C/c.andi.yaml +1 -0
  80. data/.data/spec/std/isa/inst/C/c.ldsp.yaml +1 -1
  81. data/.data/spec/std/isa/inst/C/c.li.yaml +1 -0
  82. data/.data/spec/std/isa/inst/C/c.lui.yaml +1 -0
  83. data/.data/spec/std/isa/inst/C/c.mv.yaml +1 -1
  84. data/.data/spec/std/isa/inst/C/c.sdsp.yaml +1 -1
  85. data/.data/spec/std/isa/inst/D/fsgnj.d.yaml +3 -0
  86. data/.data/spec/std/isa/inst/D/fsgnjn.d.yaml +3 -0
  87. data/.data/spec/std/isa/inst/D/fsgnjx.d.yaml +3 -0
  88. data/.data/spec/std/isa/inst/F/fadd.s.yaml +5 -5
  89. data/.data/spec/std/isa/inst/F/fclass.s.yaml +2 -2
  90. data/.data/spec/std/isa/inst/F/fcvt.l.s.yaml +1 -1
  91. data/.data/spec/std/isa/inst/F/fcvt.lu.s.yaml +1 -1
  92. data/.data/spec/std/isa/inst/F/fcvt.s.l.yaml +1 -1
  93. data/.data/spec/std/isa/inst/F/fcvt.s.lu.yaml +1 -1
  94. data/.data/spec/std/isa/inst/F/fcvt.s.w.yaml +1 -1
  95. data/.data/spec/std/isa/inst/F/fcvt.s.wu.yaml +1 -1
  96. data/.data/spec/std/isa/inst/F/fcvt.w.s.yaml +1 -1
  97. data/.data/spec/std/isa/inst/F/fcvt.wu.s.yaml +1 -1
  98. data/.data/spec/std/isa/inst/F/fdiv.s.yaml +1 -1
  99. data/.data/spec/std/isa/inst/F/feq.s.yaml +2 -2
  100. data/.data/spec/std/isa/inst/F/fle.s.yaml +2 -2
  101. data/.data/spec/std/isa/inst/F/fleq.s.yaml +2 -2
  102. data/.data/spec/std/isa/inst/F/flt.s.yaml +2 -2
  103. data/.data/spec/std/isa/inst/F/fltq.s.yaml +2 -2
  104. data/.data/spec/std/isa/inst/F/flw.yaml +2 -2
  105. data/.data/spec/std/isa/inst/F/fmadd.s.yaml +1 -1
  106. data/.data/spec/std/isa/inst/F/fmax.s.yaml +6 -6
  107. data/.data/spec/std/isa/inst/F/fmin.s.yaml +6 -6
  108. data/.data/spec/std/isa/inst/F/fmsub.s.yaml +1 -1
  109. data/.data/spec/std/isa/inst/F/fmul.s.yaml +1 -1
  110. data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +2 -2
  111. data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +1 -1
  112. data/.data/spec/std/isa/inst/F/fnmadd.s.yaml +2 -2
  113. data/.data/spec/std/isa/inst/F/fnmsub.s.yaml +1 -1
  114. data/.data/spec/std/isa/inst/F/fsgnj.s.yaml +4 -4
  115. data/.data/spec/std/isa/inst/F/fsgnjn.s.yaml +3 -3
  116. data/.data/spec/std/isa/inst/F/fsgnjx.s.yaml +4 -4
  117. data/.data/spec/std/isa/inst/F/fsqrt.s.yaml +1 -1
  118. data/.data/spec/std/isa/inst/F/fsub.s.yaml +1 -1
  119. data/.data/spec/std/isa/inst/F/fsw.yaml +1 -1
  120. data/.data/spec/std/isa/inst/I/addi.yaml +1 -1
  121. data/.data/spec/std/isa/inst/I/addiw.yaml +1 -1
  122. data/.data/spec/std/isa/inst/I/andi.yaml +1 -1
  123. data/.data/spec/std/isa/inst/I/beq.yaml +1 -1
  124. data/.data/spec/std/isa/inst/I/bge.yaml +4 -2
  125. data/.data/spec/std/isa/inst/I/bgeu.yaml +3 -0
  126. data/.data/spec/std/isa/inst/I/blt.yaml +4 -2
  127. data/.data/spec/std/isa/inst/I/bltu.yaml +3 -0
  128. data/.data/spec/std/isa/inst/I/bne.yaml +1 -1
  129. data/.data/spec/std/isa/inst/I/slt.yaml +2 -2
  130. data/.data/spec/std/isa/inst/I/sltiu.yaml +1 -1
  131. data/.data/spec/std/isa/inst/I/sltu.yaml +1 -1
  132. data/.data/spec/std/isa/inst/I/sub.yaml +1 -1
  133. data/.data/spec/std/isa/inst/I/subw.yaml +1 -1
  134. data/.data/spec/std/isa/inst/I/xori.yaml +1 -1
  135. data/.data/spec/std/isa/inst/M/mul.yaml +0 -19
  136. data/.data/spec/std/isa/inst/Q/fsgnj.q.yaml +1 -1
  137. data/.data/spec/std/isa/inst/S/sret.yaml +3 -1
  138. data/.data/spec/std/isa/inst/V/vadd.vv.yaml +1 -5
  139. data/.data/spec/std/isa/inst/V/vfsgnjn.vv.yaml +3 -0
  140. data/.data/spec/std/isa/inst/V/vfsgnjx.vv.yaml +3 -0
  141. data/.data/spec/std/isa/inst/V/vl1re8.v.yaml +3 -0
  142. data/.data/spec/std/isa/inst/V/vl2re8.v.yaml +3 -0
  143. data/.data/spec/std/isa/inst/V/vl4re8.v.yaml +3 -0
  144. data/.data/spec/std/isa/inst/V/vl8re8.v.yaml +3 -0
  145. data/.data/spec/std/isa/inst/V/vle8.v.yaml +3 -8
  146. data/.data/spec/std/isa/inst/V/vmand.mm.yaml +3 -0
  147. data/.data/spec/std/isa/inst/V/vmfle.vv.yaml +3 -0
  148. data/.data/spec/std/isa/inst/V/vmflt.vv.yaml +3 -0
  149. data/.data/spec/std/isa/inst/V/vmnand.mm.yaml +3 -0
  150. data/.data/spec/std/isa/inst/V/vmsgt.vi.yaml +3 -0
  151. data/.data/spec/std/isa/inst/V/vmsgtu.vi.yaml +3 -0
  152. data/.data/spec/std/isa/inst/V/vmsle.vi.yaml +3 -0
  153. data/.data/spec/std/isa/inst/V/vmsle.vv.yaml +3 -0
  154. data/.data/spec/std/isa/inst/V/vmsleu.vi.yaml +3 -0
  155. data/.data/spec/std/isa/inst/V/vmsleu.vv.yaml +3 -0
  156. data/.data/spec/std/isa/inst/V/vmslt.vv.yaml +3 -0
  157. data/.data/spec/std/isa/inst/V/vmsltu.vv.yaml +3 -0
  158. data/.data/spec/std/isa/inst/V/vmv.v.i.yaml +2 -13
  159. data/.data/spec/std/isa/inst/V/vmv.x.s.yaml +1 -1
  160. data/.data/spec/std/isa/inst/V/vmxnor.mm.yaml +3 -0
  161. data/.data/spec/std/isa/inst/V/vmxor.mm.yaml +3 -0
  162. data/.data/spec/std/isa/inst/V/vnsrl.wx.yaml +3 -0
  163. data/.data/spec/std/isa/inst/V/vrsub.vx.yaml +3 -0
  164. data/.data/spec/std/isa/inst/V/vse8.v.yaml +3 -4
  165. data/.data/spec/std/isa/inst/V/vwadd.vx.yaml +3 -0
  166. data/.data/spec/std/isa/inst/V/vwaddu.vx.yaml +3 -0
  167. data/.data/spec/std/isa/inst/V/vxor.vi.yaml +4 -0
  168. data/.data/spec/std/isa/inst/Zalasr/lSIZE.AQRL.layout +40 -5
  169. data/.data/spec/std/isa/inst/Zalasr/lb.aq.yaml +17 -1
  170. data/.data/spec/std/isa/inst/Zalasr/lb.aqrl.yaml +17 -1
  171. data/.data/spec/std/isa/inst/Zalasr/ld.aq.yaml +17 -1
  172. data/.data/spec/std/isa/inst/Zalasr/ld.aqrl.yaml +17 -1
  173. data/.data/spec/std/isa/inst/Zalasr/lh.aq.yaml +17 -1
  174. data/.data/spec/std/isa/inst/Zalasr/lh.aqrl.yaml +17 -1
  175. data/.data/spec/std/isa/inst/Zalasr/lw.aq.yaml +17 -1
  176. data/.data/spec/std/isa/inst/Zalasr/lw.aqrl.yaml +17 -1
  177. data/.data/spec/std/isa/inst/Zalasr/sSIZE.AQRL.layout +46 -5
  178. data/.data/spec/std/isa/inst/Zalasr/sb.aqrl.yaml +16 -1
  179. data/.data/spec/std/isa/inst/Zalasr/sb.rl.yaml +16 -1
  180. data/.data/spec/std/isa/inst/Zalasr/sd.aqrl.yaml +16 -1
  181. data/.data/spec/std/isa/inst/Zalasr/sd.rl.yaml +16 -1
  182. data/.data/spec/std/isa/inst/Zalasr/sh.aqrl.yaml +16 -1
  183. data/.data/spec/std/isa/inst/Zalasr/sh.rl.yaml +16 -1
  184. data/.data/spec/std/isa/inst/Zalasr/sw.aqrl.yaml +16 -1
  185. data/.data/spec/std/isa/inst/Zalasr/sw.rl.yaml +16 -1
  186. data/.data/spec/std/isa/inst/Zbkb/packw.yaml +1 -1
  187. data/.data/spec/std/isa/inst/Zcd/c.fld.yaml +1 -1
  188. data/.data/spec/std/isa/inst/Zcd/c.fldsp.yaml +1 -1
  189. data/.data/spec/std/isa/inst/Zcd/c.fsdsp.yaml +1 -1
  190. data/.data/spec/std/isa/inst/Zcf/c.flwsp.yaml +1 -1
  191. data/.data/spec/std/isa/inst/Zcf/c.fswsp.yaml +1 -1
  192. data/.data/spec/std/isa/inst/Zcmp/cm.pop.yaml +1 -1
  193. data/.data/spec/std/isa/inst/Zcmp/cm.popret.yaml +1 -1
  194. data/.data/spec/std/isa/inst/Zcmp/cm.popretz.yaml +1 -1
  195. data/.data/spec/std/isa/inst/Zcmp/cm.push.yaml +2 -3
  196. data/.data/spec/std/isa/inst/Zfa/fround.s.yaml +1 -1
  197. data/.data/spec/std/isa/inst/Zfh/fcvt.h.s.yaml +6 -6
  198. data/.data/spec/std/isa/inst/Zfh/fcvt.s.h.yaml +5 -5
  199. data/.data/spec/std/isa/inst/Zfh/flh.yaml +1 -1
  200. data/.data/spec/std/isa/inst/Zfh/fmv.h.x.yaml +1 -1
  201. data/.data/spec/std/isa/inst/Zfh/fmv.x.h.yaml +1 -1
  202. data/.data/spec/std/isa/inst/Zfh/fsh.yaml +1 -1
  203. data/.data/spec/std/isa/inst/Zicsr/csrrc.yaml +1 -1
  204. data/.data/spec/std/isa/inst/Zicsr/csrrci.yaml +1 -1
  205. data/.data/spec/std/isa/inst/Zicsr/csrrs.yaml +2 -2
  206. data/.data/spec/std/isa/inst/Zicsr/csrrsi.yaml +1 -1
  207. data/.data/spec/std/isa/inst/Zicsr/csrrw.yaml +1 -1
  208. data/.data/spec/std/isa/inst/Zicsr/csrrwi.yaml +1 -1
  209. data/.data/spec/std/isa/isa/builtin_functions.idl +17 -0
  210. data/.data/spec/std/isa/isa/fp.idl +1 -5
  211. data/.data/spec/std/isa/isa/globals.isa +45 -14
  212. data/.data/spec/std/isa/isa/vec.idl +1 -2
  213. data/.data/spec/std/isa/manual_version/isa/20240411/isa_20240411.yaml +5 -5
  214. data/.data/spec/std/isa/param/COUNTINHIBIT_EN.yaml +8 -2
  215. data/.data/spec/std/isa/param/JVT_BASE_MASK.yaml +1 -1
  216. data/.data/spec/std/isa/param/MCOUNTINHIBIT_IMPLEMENTED.yaml +25 -0
  217. data/.data/spec/std/isa/param/MTVEC_MODES.yaml +10 -3
  218. data/.data/spec/std/isa/param/VLEN.yaml +2 -0
  219. data/.data/spec/std/isa/profile/RVA20S64.yaml +11 -4
  220. data/.data/spec/std/isa/profile/RVA20U64.yaml +14 -5
  221. data/.data/spec/std/isa/profile/RVA22S64.yaml +14 -3
  222. data/.data/spec/std/isa/profile/RVA22U64.yaml +8 -1
  223. data/.data/spec/std/isa/profile/RVA23S64.yaml +13 -0
  224. data/.data/spec/std/isa/profile/RVA23U64.yaml +15 -1
  225. data/.data/spec/std/isa/profile/RVB23S64.yaml +15 -3
  226. data/.data/spec/std/isa/profile/RVB23U64.yaml +8 -1
  227. data/.data/spec/std/isa/profile/RVI20U32.yaml +8 -1
  228. data/.data/spec/std/isa/profile/RVI20U64.yaml +7 -0
  229. data/.data/spec/std/isa/register_file/F.yaml +3 -2
  230. data/.data/spec/std/isa/register_file/V.yaml +2 -2
  231. data/.data/spec/std/isa/register_file/X.yaml +2 -1
  232. data/lib/udb/architecture.rb +4 -25
  233. data/lib/udb/cfg_arch.rb +171 -59
  234. data/lib/udb/cli.rb +10 -1
  235. data/lib/udb/condition.rb +38 -37
  236. data/lib/udb/config.rb +72 -6
  237. data/lib/udb/logic.rb +29 -56
  238. data/lib/udb/obj/csr.rb +23 -5
  239. data/lib/udb/obj/csr_field.rb +36 -21
  240. data/lib/udb/obj/database_obj.rb +2 -5
  241. data/lib/udb/obj/extension.rb +0 -3
  242. data/lib/udb/obj/instruction.rb +1 -4
  243. data/lib/udb/obj/portfolio.rb +75 -20
  244. data/lib/udb/obj/profile.rb +0 -4
  245. data/lib/udb/obj/register_file.rb +63 -2
  246. data/lib/udb/portfolio_design.rb +3 -6
  247. data/lib/udb/resolver.rb +84 -23
  248. data/lib/udb/version.rb +1 -1
  249. data/lib/udb/version_spec.rb +8 -0
  250. data/lib/udb/z3.rb +23 -0
  251. data/lib/udb.rb +0 -3
  252. metadata +25 -37
  253. data/.data/cfgs/profile/RVA23M64.yaml +0 -159
  254. data/.data/cfgs/profile/RVB23M64.yaml +0 -149
  255. data/.data/spec/schemas/proc_cert_class_schema.json +0 -35
  256. data/.data/spec/schemas/proc_cert_model_schema.json +0 -336
  257. data/.data/spec/std/isa/proc_cert_class/AC.yaml +0 -13
  258. data/.data/spec/std/isa/proc_cert_class/MC.yaml +0 -13
  259. data/.data/spec/std/isa/proc_cert_class/RVI.yaml +0 -16
  260. data/.data/spec/std/isa/proc_cert_model/AC100.yaml +0 -72
  261. data/.data/spec/std/isa/proc_cert_model/AC200.yaml +0 -58
  262. data/.data/spec/std/isa/proc_cert_model/MC100-32.yaml +0 -155
  263. data/.data/spec/std/isa/proc_cert_model/MC100-64.yaml +0 -21
  264. data/.data/spec/std/isa/proc_cert_model/MC200-32.yaml +0 -60
  265. data/.data/spec/std/isa/proc_cert_model/MC200-64.yaml +0 -21
  266. data/.data/spec/std/isa/proc_cert_model/MC300-32.yaml +0 -40
  267. data/.data/spec/std/isa/proc_cert_model/MC300-64.yaml +0 -21
  268. data/.data/spec/std/isa/proc_cert_model/RVI20-32.yaml +0 -39
  269. data/.data/spec/std/isa/proc_cert_model/RVI20-64.yaml +0 -19
  270. data/.data/spec/std/isa/profile/RVA23M64.yaml +0 -24
  271. data/.data/spec/std/isa/profile/RVB23M64.yaml +0 -86
  272. data/lib/udb/cert_normative_rule.rb +0 -41
  273. data/lib/udb/obj/certifiable_obj.rb +0 -21
  274. data/lib/udb/obj/certificate.rb +0 -230
  275. data/lib/udb/proc_cert_design.rb +0 -77
@@ -19,13 +19,11 @@ versions:
19
19
  - name: Unknown
20
20
  email: unknown@void.segfault
21
21
  company: Unknown
22
- requirements:
23
- extension:
24
- allOf:
25
- - name: Zaamo
26
- version: "= 1.0.0"
27
- - name: Zalrsc
28
- version: "= 1.0.0"
22
+ requirements:
23
+ extension:
24
+ allOf:
25
+ - name: Zaamo
26
+ - name: Zalrsc
29
27
  description: |
30
28
 
31
29
  The atomic-instruction extension, named `A`, contains
@@ -12,12 +12,24 @@ versions:
12
12
  - version: "1.11.0"
13
13
  state: ratified
14
14
  ratification_date: 2019-06
15
+ requirements:
16
+ extension:
17
+ name: Sm
18
+ version: "= 1.11"
15
19
  - version: "1.12.0"
16
20
  state: ratified
17
21
  ratification_date: 2021-12
22
+ requirements:
23
+ extension:
24
+ name: Sm
25
+ version: "= 1.12"
18
26
  - version: "1.13.0"
19
27
  state: ratified
20
28
  ratification_date: 2024-10
29
+ requirements:
30
+ extension:
31
+ name: Sm
32
+ version: "= 1.13"
21
33
  requirements:
22
34
  extension:
23
35
  name: U
@@ -0,0 +1,52 @@
1
+ # Copyright (c) RISC-V International
2
+ # SPDX-License-Identifier: CC-BY-4.0
3
+
4
+ # yaml-language-server: $schema=../../../schemas/ext_schema.json
5
+
6
+ $schema: "ext_schema.json#"
7
+ kind: extension
8
+ name: Smpmpmt
9
+ long_name: PMP-based Memory Types Extension
10
+ description: |
11
+ The Smpmpmt extension provides a mechanism analogous to Svpbmt but associated
12
+ with the PMP registers rather than page-table entries.
13
+ A new WARL field, MT (Memory Type), is added in the unallocated bits 6--5 in
14
+ each PMP configuration register.
15
+ The MT field of the lowest-numbered PMP register that an access matches,
16
+ following the existing PMP address-matching rules, overrides the PMAs for
17
+ that access.
18
+ If an access matches no PMP registers, or if the MT field of the matching PMP
19
+ register contains the value PMA, then the access proceeds as though the
20
+ Smpmpmt extension were not implemented.
21
+
22
+ NOTE: The permissions checks associated with a PMP register are unrelated to
23
+ whether an access is considered to match a PMP register.
24
+ For example, even though a PMP register with its L bit clear does not enforce
25
+ its permissions checks on M-mode accesses, M-mode accesses within the
26
+ address range of that PMP register are still considered to match.
27
+ Hence, that PMP register's MT field takes effect for matching M-mode accesses.
28
+
29
+ The MT field is encoded as shown below.
30
+ The encoding is identical to that of the PBMT field, and the meaning of each
31
+ type is as specified by the Svpbmt extension.
32
+ Refer to that specification for the semantics of each type.
33
+
34
+ The MT field encoding is identical to Svpbmt's PBMT field:
35
+
36
+ * 0 (PMA): No override; use platform PMAs.
37
+ * 1 (NC): Non-cacheable, idempotent, weakly-ordered (RVWMO) main memory.
38
+ * 2 (IO): Non-cacheable, non-idempotent, strongly-ordered (I/O ordering) I/O.
39
+ * 3: Reserved for future standard use.
40
+
41
+ The PMP-based memory types compose with the page-based memory types as follows.
42
+ First, the PMP-based memory types override the PMAs, producing an intermediate
43
+ set of attributes.
44
+ Then, supervisor-level memory attributes (e.g. the page-based attributes
45
+ described in the Svpbmt specification) override the intermediate attributes to
46
+ produce a final set of attributes.
47
+ As with Svpbmt, it is implementation-defined whether PMP-based memory types
48
+ override additional PMAs not explicitly listed in the table above.
49
+ type: privileged
50
+ versions:
51
+ - version: "0.6"
52
+ state: frozen
@@ -10,25 +10,13 @@ long_name: 32-bit virtual address translation (3 level)
10
10
  description: 32-bit virtual address translation (3 level)
11
11
  type: privileged
12
12
  versions:
13
- - version: "1.11.0"
13
+ - version: "1.0"
14
14
  state: ratified
15
15
  ratification_date: 2019-05
16
- requirements:
17
- extension:
16
+ requirements:
17
+ allOf:
18
+ - extension:
18
19
  name: S
19
- version: ">= 1.11"
20
- - version: "1.12.0"
21
- state: ratified
22
- ratification_date: 2021-12
23
- url: https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf
24
- requirements:
25
- extension:
26
- name: S
27
- version: ">= 1.12"
28
- - version: "1.13.0"
29
- state: ratified
30
- ratification_date: 2024-10
31
- requirements:
32
- extension:
33
- name: S
34
- version: ">= 1.13"
20
+ - param:
21
+ name: SXLEN
22
+ includes: 32
@@ -10,25 +10,13 @@ long_name: 39-bit virtual address translation (3 level)
10
10
  description: 39-bit virtual address translation (3 level)
11
11
  type: privileged
12
12
  versions:
13
- - version: "1.11.0"
13
+ - version: "1.0"
14
14
  state: ratified
15
15
  ratification_date: 2019-05
16
- requirements:
17
- extension:
16
+ requirements:
17
+ allOf:
18
+ - extension:
18
19
  name: S
19
- version: ">= 1.11"
20
- - version: "1.12.0"
21
- state: ratified
22
- ratification_date: 2021-12
23
- url: https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf
24
- requirements:
25
- extension:
26
- name: S
27
- version: ">= 1.12"
28
- - version: "1.13.0"
29
- state: ratified
30
- ratification_date: 2024-10
31
- requirements:
32
- extension:
33
- name: S
34
- version: ">= 1.13"
20
+ - param:
21
+ name: SXLEN
22
+ includes: 64
@@ -10,25 +10,9 @@ long_name: 48-bit virtual address translation (4 level)
10
10
  description: 48-bit virtual address translation (4 level)
11
11
  type: privileged
12
12
  versions:
13
- - version: "1.11.0"
13
+ - version: "1.0"
14
14
  state: ratified
15
15
  ratification_date: 2019-05
16
- requirements:
17
- extension:
18
- name: Sv39
19
- version: ">= 1.11"
20
- - version: "1.12.0"
21
- state: ratified
22
- ratification_date: 2021-12
23
- url: https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf
24
- requirements:
25
- extension:
26
- name: Sv39
27
- version: ">= 1.12"
28
- - version: "1.13.0"
29
- state: ratified
30
- ratification_date: 2024-10
31
- requirements:
32
- extension:
33
- name: Sv39
34
- version: ">= 1.13"
16
+ requirements:
17
+ extension:
18
+ name: Sv39
@@ -10,25 +10,9 @@ long_name: 57-bit virtual address translation (5 level)
10
10
  description: 57-bit virtual address translation (5 level)
11
11
  type: privileged
12
12
  versions:
13
- - version: "1.11.0"
13
+ - version: "1.0"
14
14
  state: ratified
15
15
  ratification_date: unknown
16
- requirements:
17
- extension:
18
- name: Sv48
19
- version: ">= 1.11"
20
- - version: "1.12.0"
21
- state: ratified
22
- ratification_date: 2021-12
23
- url: https://github.com/riscv/riscv-isa-manual/releases/download/Priv-v1.12/riscv-privileged-20211203.pdf
24
- requirements:
25
- extension:
26
- name: Sv48
27
- version: ">= 1.12"
28
- - version: "1.13.0"
29
- state: ratified
30
- ratification_date: 2024-10
31
- requirements:
32
- extension:
33
- name: Sv48
34
- version: ">= 1.13"
16
+ requirements:
17
+ extension:
18
+ name: Sv48
@@ -0,0 +1,71 @@
1
+ # Copyright (c) RISC-V International
2
+ # SPDX-License-Identifier: CC-BY-4.0
3
+
4
+ # yaml-language-server: $schema=../../../schemas/ext_schema.json
5
+
6
+ $schema: "ext_schema.json#"
7
+ kind: extension
8
+ name: Svukte
9
+ long_name: Address-Independent Latency of User-Mode Faults to Supervisor Addresses
10
+ type: privileged
11
+ description: |
12
+ == "Svukte" Extension for Address-Independent Latency of User-Mode Faults to Supervisor Addresses, Version 0.4
13
+
14
+ The Svukte extension provides a means to make user-mode accesses to supervisor
15
+ memory raise page faults with timing that is independent of the address-translation
16
+ configuration and page-table contents, thereby mitigating attacks that attempt
17
+ to discover the supervisor software's address-space layout.
18
+
19
+ If the Svukte extension is implemented, the `senvcfg`.UKTE field is writable.
20
+ If the hypervisor extension is additionally implemented, the `hstatus`.HUKTE
21
+ field is also writable.
22
+ See <<sec:senvcfg>> and <<sec:hstatus>> for the definitions of those fields.
23
+
24
+ The Svukte extension depends on the Sv39 extension.
25
+
26
+ [NOTE]
27
+ ====
28
+ Svukte is not defined for Sv32 because the small address space limits the
29
+ available entropy, reducing the effectiveness of address-space layout
30
+ randomization.
31
+ If an Sv32 variant were to be defined, it would need to account for the fact
32
+ that it is more common to reserve only the upper 1 GiB of the virtual-address
33
+ space for the operating system, leaving the lower 3 GiB for user
34
+ processes.
35
+ ====
36
+
37
+ When `senvcfg`.UKTE=1 and the active `satp` register's MODE field is not Bare,
38
+ an instruction fetch or explicit memory access whose
39
+ effective privilege mode is U or VU is considered to be _Svukte-qualified_.
40
+ For any Svukte-qualified memory access, virtual addresses >= 2^SXLEN-1^ are
41
+ considered to be invalid; hence, an Svukte-qualified access to such an address
42
+ raises a page-fault exception corresponding to the original access type.
43
+ The timing of an instruction that raises an exception for this reason must be
44
+ independent of the faulting virtual address.
45
+
46
+ [NOTE]
47
+ ====
48
+ An Svukte-qualified access to such an address raises an exception even
49
+ if the underlying PTE would have otherwise allowed the access.
50
+ Practical implementations of Svukte will raise these exceptions based upon the
51
+ effective address, without accessing the page tables or address-translation
52
+ caches.
53
+ ====
54
+
55
+ [NOTE]
56
+ ====
57
+ Since whether an instruction is Svukte-qualified depends on the _effective_
58
+ privilege mode of the access, even some instructions executed in HS-mode or M-mode
59
+ (e.g. HLV with `hstatus`.SPVP=0, or LW with `mstatus`.MPRV=1 and
60
+ `mstatus`.MPP=U) are Svukte-qualified.
61
+ ====
62
+
63
+ As described in <<sec:hstatus>>, the `hstatus`.HUKTE field, rather than the
64
+ `senvcfg`.UKTE field, determines whether HLV, HLVX, and HSV instructions
65
+ executed within U-mode are Svukte-qualified.
66
+ versions:
67
+ - version: "0.4.0"
68
+ state: development
69
+ requirements:
70
+ extension:
71
+ name: Sv39
@@ -20,6 +20,6 @@ description: |
20
20
  accelerator device indicating completion of a job previously submitted to the device.
21
21
  type: unprivileged
22
22
  versions:
23
- - version: "1.0.1"
23
+ - version: "1.0.0"
24
24
  state: ratified
25
25
  ratification_date: 2022-11
@@ -13,15 +13,3 @@ versions:
13
13
  - version: "2.0.0"
14
14
  state: ratified
15
15
  ratification_date: 2023-03
16
- requirements:
17
- idl(): |
18
- -> (HPM_COUNTER_EN[3] || HPM_COUNTER_EN[4] || HPM_COUNTER_EN[5] ||
19
- HPM_COUNTER_EN[6] || HPM_COUNTER_EN[7] || HPM_COUNTER_EN[8] ||
20
- HPM_COUNTER_EN[9] || HPM_COUNTER_EN[10] || HPM_COUNTER_EN[11] ||
21
- HPM_COUNTER_EN[12] || HPM_COUNTER_EN[13] || HPM_COUNTER_EN[14] ||
22
- HPM_COUNTER_EN[15] || HPM_COUNTER_EN[16] || HPM_COUNTER_EN[17] ||
23
- HPM_COUNTER_EN[18] || HPM_COUNTER_EN[19] || HPM_COUNTER_EN[20] ||
24
- HPM_COUNTER_EN[21] || HPM_COUNTER_EN[22] || HPM_COUNTER_EN[23] ||
25
- HPM_COUNTER_EN[24] || HPM_COUNTER_EN[25] || HPM_COUNTER_EN[26] ||
26
- HPM_COUNTER_EN[27] || HPM_COUNTER_EN[28] || HPM_COUNTER_EN[29] ||
27
- HPM_COUNTER_EN[30] || HPM_COUNTER_EN[31]);
@@ -22,6 +22,7 @@ encoding:
22
22
  - name: imm
23
23
  location: 12|6-2
24
24
  not: 0
25
+ sign_extend: true
25
26
  - name: xd
26
27
  location: 11-7
27
28
  not: 0
@@ -23,6 +23,7 @@ encoding:
23
23
  location: 12|4-3|5|2|6
24
24
  left_shift: 4
25
25
  not: 0
26
+ sign_extend: true
26
27
  access:
27
28
  s: always
28
29
  u: always
@@ -23,6 +23,7 @@ encoding:
23
23
  variables:
24
24
  - name: imm
25
25
  location: 12|6-2
26
+ sign_extend: true
26
27
  - name: xd
27
28
  location: 11-7
28
29
  not: 0
@@ -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:
@@ -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();