udb 0.1.15 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.data/cfgs/example_rv64_with_overlay.yaml +1 -0
  3. data/.data/cfgs/mc100-32-full-example.yaml +1 -0
  4. data/.data/cfgs/profile/RVA20S64.yaml +2 -0
  5. data/.data/cfgs/profile/RVA20U64.yaml +2 -0
  6. data/.data/cfgs/profile/RVA22S64.yaml +2 -0
  7. data/.data/cfgs/profile/RVA22U64.yaml +2 -0
  8. data/.data/cfgs/profile/RVA23S64.yaml +2 -0
  9. data/.data/cfgs/profile/RVA23U64.yaml +2 -0
  10. data/.data/cfgs/profile/RVB23S64.yaml +2 -0
  11. data/.data/cfgs/profile/RVB23U64.yaml +2 -0
  12. data/.data/cfgs/qc_iu.yaml +1 -0
  13. data/.data/cfgs/rv32-riscv-tests.yaml +1 -0
  14. data/.data/cfgs/rv32-vector.yaml +1 -0
  15. data/.data/cfgs/rv64-riscv-tests.yaml +1 -0
  16. data/.data/cfgs/rv64-vector.yaml +1 -0
  17. data/.data/spec/std/isa/csr/H/henvcfg.yaml +1 -1
  18. data/.data/spec/std/isa/csr/H/htimedeltah.yaml +1 -1
  19. data/.data/spec/std/isa/csr/Smctr/vsctrctl.yaml +1 -1
  20. data/.data/spec/std/isa/csr/hstateen0h.yaml +1 -1
  21. data/.data/spec/std/isa/csr/hstateen1h.yaml +1 -1
  22. data/.data/spec/std/isa/csr/hstateen2h.yaml +1 -1
  23. data/.data/spec/std/isa/csr/hstateen3h.yaml +1 -1
  24. data/.data/spec/std/isa/csr/instreth.yaml +1 -3
  25. data/.data/spec/std/isa/csr/minstreth.yaml +1 -1
  26. data/.data/spec/std/isa/csr/mstatus.yaml +1 -1
  27. data/.data/spec/std/isa/csr/mstatush.yaml +1 -1
  28. data/.data/spec/std/isa/csr/senvcfg.yaml +1 -1
  29. data/.data/spec/std/isa/csr/sepc.yaml +4 -3
  30. data/.data/spec/std/isa/csr/sip.yaml +1 -1
  31. data/.data/spec/std/isa/csr/sscratch.yaml +3 -2
  32. data/.data/spec/std/isa/csr/stval.yaml +3 -2
  33. data/.data/spec/std/isa/csr/stvec.yaml +5 -4
  34. data/.data/spec/std/isa/csr/time.yaml +1 -1
  35. data/.data/spec/std/isa/csr/timeh.yaml +1 -1
  36. data/.data/spec/std/isa/csr/vsepc.yaml +6 -5
  37. data/.data/spec/std/isa/csr/vstvec.yaml +5 -4
  38. data/.data/spec/std/isa/ext/M.yaml +4 -0
  39. data/.data/spec/std/isa/ext/Shgatpa.yaml +1 -0
  40. data/.data/spec/std/isa/ext/Zibi.yaml +29 -0
  41. data/.data/spec/std/isa/inst/B/roriw.yaml +1 -1
  42. data/.data/spec/std/isa/inst/B/rorw.yaml +1 -1
  43. data/.data/spec/std/isa/inst/F/fmv.w.x.yaml +3 -0
  44. data/.data/spec/std/isa/inst/F/fmv.x.w.yaml +3 -0
  45. data/.data/spec/std/isa/inst/M/mul.yaml +1 -3
  46. data/.data/spec/std/isa/inst/M/mulh.yaml +1 -3
  47. data/.data/spec/std/isa/inst/M/mulhsu.yaml +1 -3
  48. data/.data/spec/std/isa/inst/M/mulhu.yaml +1 -3
  49. data/.data/spec/std/isa/inst/M/mulw.yaml +1 -3
  50. data/.data/spec/std/isa/inst/Zbb/ctzw.yaml +6 -1
  51. data/.data/spec/std/isa/inst/{Q → Zfa}/fltq.q.yaml +2 -2
  52. data/.data/spec/std/isa/inst/Zibi/beqi.yaml +45 -0
  53. data/.data/spec/std/isa/inst/Zibi/bnei.yaml +45 -0
  54. data/.data/spec/std/isa/inst/Zicbom/cbo.inval.yaml +1 -1
  55. data/.data/spec/std/isa/inst/Zicfiss/ssamoswap.d.yaml +1 -1
  56. data/.data/spec/std/isa/inst/Zicfiss/ssamoswap.w.yaml +1 -1
  57. data/.data/spec/std/isa/inst/Zicfiss/sspopchk.yaml +63 -0
  58. data/.data/spec/std/isa/inst/Zicfiss/sspush.yaml +63 -0
  59. data/.data/spec/std/isa/inst/Zimop/mop.r.28.yaml +1 -2
  60. data/.data/spec/std/isa/inst/Zimop/mop.r.N.layout +1 -2
  61. data/.data/spec/std/isa/inst/Zimop/mop.rr.7.yaml +1 -2
  62. data/.data/spec/std/isa/inst/Zimop/mop.rr.N.layout +1 -2
  63. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vandn.vv.yaml +1 -1
  64. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vandn.vx.yaml +1 -1
  65. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vbrev8.v.yaml +1 -1
  66. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vrev8.v.yaml +1 -1
  67. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vrol.vv.yaml +1 -1
  68. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vrol.vx.yaml +1 -1
  69. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vror.vi.yaml +1 -1
  70. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vror.vv.yaml +1 -1
  71. data/.data/spec/std/isa/inst/{Zvbb → Zvkb}/vror.vx.yaml +1 -1
  72. data/.data/spec/std/isa/isa/globals.isa +1 -1
  73. data/.data/spec/std/isa/isa/util.idl +3 -3
  74. data/.data/spec/std/isa/param/COUNTINHIBIT_EN.yaml +9 -0
  75. data/.data/spec/std/isa/param/HCONTEXT_AVAILABLE.yaml +1 -1
  76. data/.data/spec/std/isa/param/MUTABLE_MISA_H.yaml +1 -1
  77. data/.data/spec/std/isa/param/MUTABLE_MISA_S.yaml +1 -1
  78. data/lib/udb/config.rb +1 -1
  79. data/lib/udb/version.rb +1 -1
  80. metadata +47 -46
  81. data/.data/spec/std/isa/inst/Zicfiss/sspopchk.x1.yaml +0 -25
  82. data/.data/spec/std/isa/inst/Zicfiss/sspopchk.x5.yaml +0 -25
  83. data/.data/spec/std/isa/inst/Zicfiss/sspush.x1.yaml +0 -25
  84. data/.data/spec/std/isa/inst/Zicfiss/sspush.x5.yaml +0 -25
  85. /data/.data/spec/std/isa/inst/{Smdbltrp → Smctr}/sctrclr.yaml +0 -0
  86. /data/.data/spec/std/isa/inst/{D → Zfa}/fcvtmod.w.d.yaml +0 -0
  87. /data/.data/spec/std/isa/inst/{D → Zfa}/fleq.d.yaml +0 -0
  88. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fleq.h.yaml +0 -0
  89. /data/.data/spec/std/isa/inst/{Q → Zfa}/fleq.q.yaml +0 -0
  90. /data/.data/spec/std/isa/inst/{F → Zfa}/fleq.s.yaml +0 -0
  91. /data/.data/spec/std/isa/inst/{D → Zfa}/fli.d.yaml +0 -0
  92. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fli.h.yaml +0 -0
  93. /data/.data/spec/std/isa/inst/{Q → Zfa}/fli.q.yaml +0 -0
  94. /data/.data/spec/std/isa/inst/{D → Zfa}/fltq.d.yaml +0 -0
  95. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fltq.h.yaml +0 -0
  96. /data/.data/spec/std/isa/inst/{F → Zfa}/fltq.s.yaml +0 -0
  97. /data/.data/spec/std/isa/inst/{D → Zfa}/fmaxm.d.yaml +0 -0
  98. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fmaxm.h.yaml +0 -0
  99. /data/.data/spec/std/isa/inst/{Q → Zfa}/fmaxm.q.yaml +0 -0
  100. /data/.data/spec/std/isa/inst/{D → Zfa}/fminm.d.yaml +0 -0
  101. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fminm.h.yaml +0 -0
  102. /data/.data/spec/std/isa/inst/{Q → Zfa}/fminm.q.yaml +0 -0
  103. /data/.data/spec/std/isa/inst/{D → Zfa}/fmvh.x.d.yaml +0 -0
  104. /data/.data/spec/std/isa/inst/{Q → Zfa}/fmvh.x.q.yaml +0 -0
  105. /data/.data/spec/std/isa/inst/{D → Zfa}/fmvp.d.x.yaml +0 -0
  106. /data/.data/spec/std/isa/inst/{Q → Zfa}/fmvp.q.x.yaml +0 -0
  107. /data/.data/spec/std/isa/inst/{D → Zfa}/fround.d.yaml +0 -0
  108. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/fround.h.yaml +0 -0
  109. /data/.data/spec/std/isa/inst/{Q → Zfa}/fround.q.yaml +0 -0
  110. /data/.data/spec/std/isa/inst/{D → Zfa}/froundnx.d.yaml +0 -0
  111. /data/.data/spec/std/isa/inst/{Zfh → Zfa}/froundnx.h.yaml +0 -0
  112. /data/.data/spec/std/isa/inst/{Q → Zfa}/froundnx.q.yaml +0 -0
@@ -0,0 +1,45 @@
1
+ # Copyright (c) RISC-V International
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ # yaml-language-server: $schema=../../../../schemas/inst_schema.json
5
+
6
+ $schema: "inst_schema.json#"
7
+ kind: instruction
8
+ name: beqi
9
+ long_name: Branch if equal immediate
10
+ description: |
11
+ Branch to PC + offset if the value in register xs1 is equal to the XLEN-bit
12
+ comparison constant decoded from cimm.
13
+
14
+ The cimm field is not sign-extended: cimm == 0 encodes the value -1, and
15
+ cimm values 1 through 31 encode the corresponding positive integer values.
16
+
17
+ Raise a `MisalignedAddress` exception if the branch is taken and PC + offset is
18
+ misaligned.
19
+ definedBy:
20
+ extension:
21
+ name: Zibi
22
+ assembly: xs1, cimm, offset
23
+ encoding:
24
+ match: "-----------------010-----1100011"
25
+ variables:
26
+ - name: offset
27
+ location: 31|7|30-25|11-8
28
+ left_shift: 1
29
+ sign_extend: true
30
+ - name: cimm
31
+ location: 24-20
32
+ - name: xs1
33
+ location: 19-15
34
+ access:
35
+ s: always
36
+ u: always
37
+ vs: always
38
+ vu: always
39
+ operation(): |
40
+ XReg lhs = X[xs1];
41
+ XReg rhs = (cimm == 0) ? {MXLEN{1'b1}} : cimm;
42
+
43
+ if (lhs == rhs) {
44
+ jump_halfword($pc + $signed(offset));
45
+ }
@@ -0,0 +1,45 @@
1
+ # Copyright (c) RISC-V International
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ # yaml-language-server: $schema=../../../../schemas/inst_schema.json
5
+
6
+ $schema: "inst_schema.json#"
7
+ kind: instruction
8
+ name: bnei
9
+ long_name: Branch if not equal immediate
10
+ description: |
11
+ Branch to PC + offset if the value in register xs1 is not equal to the XLEN-bit
12
+ comparison constant decoded from cimm.
13
+
14
+ The cimm field is not sign-extended: cimm == 0 encodes the value -1, and
15
+ cimm values 1 through 31 encode the corresponding positive integer values.
16
+
17
+ Raise a `MisalignedAddress` exception if the branch is taken and PC + offset is
18
+ misaligned.
19
+ definedBy:
20
+ extension:
21
+ name: Zibi
22
+ assembly: xs1, cimm, offset
23
+ encoding:
24
+ match: "-----------------011-----1100011"
25
+ variables:
26
+ - name: offset
27
+ location: 31|7|30-25|11-8
28
+ left_shift: 1
29
+ sign_extend: true
30
+ - name: cimm
31
+ location: 24-20
32
+ - name: xs1
33
+ location: 19-15
34
+ access:
35
+ s: always
36
+ u: always
37
+ vs: always
38
+ vu: always
39
+ operation(): |
40
+ XReg lhs = X[xs1];
41
+ XReg rhs = (cimm == 0) ? {MXLEN{1'b1}} : cimm;
42
+
43
+ if (lhs != rhs) {
44
+ jump_halfword($pc + $signed(offset));
45
+ }
@@ -52,7 +52,7 @@ description: |
52
52
  `cbo.inval` is ordered by `FENCE` instructions but not `FENCE.I` or `SFENCE.VMA`.
53
53
 
54
54
  <%- if CACHE_BLOCK_SIZE.bit_length > [PMP_GRANULARITY, PMA_GRANULARITY].min -%>
55
- Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.zero` has UNSPECIFIED behavior.
55
+ Both PMP and PMA access control must be the same for all bytes in the block; otherwise, `cbo.inval` has UNSPECIFIED behavior.
56
56
  <%- end -%>
57
57
 
58
58
  Invalidate operations are treated as stores for page and access permissions. If permission checks fail,
@@ -12,7 +12,7 @@ description: |
12
12
  definedBy:
13
13
  extension:
14
14
  name: Zicfiss
15
- assembly: xd, xs2, xs1
15
+ assembly: xd, xs2, (xs1)
16
16
  encoding:
17
17
  match: 01001------------011-----0101111
18
18
  variables:
@@ -12,7 +12,7 @@ description: |
12
12
  definedBy:
13
13
  extension:
14
14
  name: Zicfiss
15
- assembly: xd, xs2, xs1
15
+ assembly: xd, xs2, (xs1)
16
16
  encoding:
17
17
  match: 01001------------010-----0101111
18
18
  variables:
@@ -0,0 +1,63 @@
1
+ # Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ # yaml-language-server: $schema=../../../../schemas/inst_schema.json
5
+
6
+ $schema: inst_schema.json#
7
+ kind: instruction
8
+ name: sspopchk
9
+ long_name: Shadow Stack Pop and Check
10
+ description: |
11
+ SSPOPCHK pops a value from the shadow stack and checks it against link
12
+ register `xs1`. The encoding restricts `xs1` to `x1` or `x5`.
13
+
14
+ This instruction uses the `mop.r.28` codepoint provided by Zimop.
15
+ definedBy:
16
+ extension:
17
+ name: Zicfiss
18
+ assembly: xs1
19
+ encoding:
20
+ match: "110011011100-----100000001110011"
21
+ variables:
22
+ - name: xs1
23
+ location: 19-15
24
+ not:
25
+ [
26
+ 0,
27
+ 2,
28
+ 3,
29
+ 4,
30
+ 6,
31
+ 7,
32
+ 8,
33
+ 9,
34
+ 10,
35
+ 11,
36
+ 12,
37
+ 13,
38
+ 14,
39
+ 15,
40
+ 16,
41
+ 17,
42
+ 18,
43
+ 19,
44
+ 20,
45
+ 21,
46
+ 22,
47
+ 23,
48
+ 24,
49
+ 25,
50
+ 26,
51
+ 27,
52
+ 28,
53
+ 29,
54
+ 30,
55
+ 31,
56
+ ]
57
+ access:
58
+ s: always
59
+ u: always
60
+ vs: always
61
+ vu: always
62
+ data_independent_timing: false
63
+ operation(): |
@@ -0,0 +1,63 @@
1
+ # Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
2
+ # SPDX-License-Identifier: BSD-3-Clause-Clear
3
+
4
+ # yaml-language-server: $schema=../../../../schemas/inst_schema.json
5
+
6
+ $schema: inst_schema.json#
7
+ kind: instruction
8
+ name: sspush
9
+ long_name: Shadow Stack Push
10
+ description: |
11
+ SSPUSH pushes the value of link register `xs2` to the shadow stack.
12
+ The encoding restricts `xs2` to `x1` or `x5`.
13
+
14
+ This instruction uses the `mop.rr.7` codepoint provided by Zimop.
15
+ definedBy:
16
+ extension:
17
+ name: Zicfiss
18
+ assembly: xs2
19
+ encoding:
20
+ match: "1100111-----00000100000001110011"
21
+ variables:
22
+ - name: xs2
23
+ location: 24-20
24
+ not:
25
+ [
26
+ 0,
27
+ 2,
28
+ 3,
29
+ 4,
30
+ 6,
31
+ 7,
32
+ 8,
33
+ 9,
34
+ 10,
35
+ 11,
36
+ 12,
37
+ 13,
38
+ 14,
39
+ 15,
40
+ 16,
41
+ 17,
42
+ 18,
43
+ 19,
44
+ 20,
45
+ 21,
46
+ 22,
47
+ 23,
48
+ 24,
49
+ 25,
50
+ 26,
51
+ 27,
52
+ 28,
53
+ 29,
54
+ 30,
55
+ 31,
56
+ ]
57
+ access:
58
+ s: always
59
+ u: always
60
+ vs: always
61
+ vu: always
62
+ data_independent_timing: false
63
+ operation(): |
@@ -33,8 +33,7 @@ access:
33
33
  vu: always
34
34
  data_independent_timing: false
35
35
  hints:
36
- - { $ref: inst/Zicfiss/sspopchk.x1.yaml# }
37
- - { $ref: inst/Zicfiss/sspopchk.x5.yaml# }
36
+ - { $ref: inst/Zicfiss/sspopchk.yaml# }
38
37
  - { $ref: inst/Zicfiss/ssrdp.yaml# }
39
38
  operation(): |
40
39
  X[xd] = 0;
@@ -50,8 +50,7 @@ access:
50
50
  data_independent_timing: false
51
51
  <% if n == 28 -%>
52
52
  hints:
53
- - { $ref: inst/Zicfiss/sspopchk.x1.yaml# }
54
- - { $ref: inst/Zicfiss/sspopchk.x5.yaml# }
53
+ - { $ref: inst/Zicfiss/sspopchk.yaml# }
55
54
  - { $ref: inst/Zicfiss/ssrdp.yaml# }
56
55
  <% end -%>
57
56
  operation(): |
@@ -36,7 +36,6 @@ access:
36
36
  vu: always
37
37
  data_independent_timing: false
38
38
  hints:
39
- - { $ref: inst/Zicfiss/sspush.x1.yaml# }
40
- - { $ref: inst/Zicfiss/sspush.x5.yaml# }
39
+ - { $ref: inst/Zicfiss/sspush.yaml# }
41
40
  operation(): |
42
41
  X[xd] = 0;
@@ -51,8 +51,7 @@ access:
51
51
  data_independent_timing: false
52
52
  <% if n == 7 -%>
53
53
  hints:
54
- - { $ref: inst/Zicfiss/sspush.x1.yaml# }
55
- - { $ref: inst/Zicfiss/sspush.x5.yaml# }
54
+ - { $ref: inst/Zicfiss/sspush.yaml# }
56
55
  <% end -%>
57
56
  operation(): |
58
57
  X[xd] = 0;
@@ -11,7 +11,7 @@ description: |
11
11
  Performs a bitwise AND operation between vector register vs2 and the bitwise NOT of vector register vs1, storing results in vector register vd according to mask vm.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vs1, vm
16
16
  encoding:
17
17
  match: 000001-----------000-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Performs a bitwise AND operation between vector register vs2 and the bitwise NOT of scalar register xs1, storing results in vector register vd according to mask vm.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, xs1, vm
16
16
  encoding:
17
17
  match: 000001-----------100-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Reverses the byte order within each element of vector register vs2, storing results in vector register vd according to mask vm. Similar to vrev8.v but with different encoding.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vm
16
16
  encoding:
17
17
  match: 010010------01000010-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Reverses the byte order within each element of vector register vs2, storing results in vector register vd according to mask vm. This is equivalent to a byte-level reversal of each element.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vm
16
16
  encoding:
17
17
  match: 010010------01001010-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 left by the amount specified in vector register vs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vs1, vm
16
16
  encoding:
17
17
  match: 010101-----------000-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 left by the amount specified in scalar register xs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, xs1, vm
16
16
  encoding:
17
17
  match: 010101-----------100-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 right by the immediate shift amount, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, imm, vm
16
16
  encoding:
17
17
  match: 01010------------011-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 right by the amount specified in vector register vs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, vs1, vm
16
16
  encoding:
17
17
  match: 010100-----------000-----1010111
@@ -11,7 +11,7 @@ description: |
11
11
  Rotates each element in vector register vs2 right by the amount specified in scalar register xs1, storing results in vector register vd according to mask vm. The rotation amount is taken modulo the element width.
12
12
  definedBy:
13
13
  extension:
14
- name: Zvbb
14
+ name: Zvkb
15
15
  assembly: vd, vs2, xs1, vm
16
16
  encoding:
17
17
  match: 010100-----------100-----1010111
@@ -3144,7 +3144,7 @@ function mstatus_sd_reset_value
3144
3144
  fs_value = (!implemented?(ExtensionName::F)) ? 0 : MSTATUS_FS_LEGAL_VALUES[0];
3145
3145
  }
3146
3146
  if ((!implemented?(ExtensionName::V)) || ($array_size(MSTATUS_VS_LEGAL_VALUES) == 1)) {
3147
- fs_value = (!implemented?(ExtensionName::V)) ? 0 : MSTATUS_VS_LEGAL_VALUES[0];
3147
+ vs_value = (!implemented?(ExtensionName::V)) ? 0 : MSTATUS_VS_LEGAL_VALUES[0];
3148
3148
  }
3149
3149
 
3150
3150
  return ((fs_value == 3) || (vs_value == 3)) ? 1 : 0;
@@ -73,9 +73,9 @@ function highest_set_bit {
73
73
  or -1 if value is zero.
74
74
  }
75
75
  body {
76
- for (Bits<8> i=xlen()-1; i >= 0; i--) {
77
- if (value[i] == 1) {
78
- return i;
76
+ for (Bits<8> i=xlen(); i > 0; i--) {
77
+ if (value[i-1] == 1) {
78
+ return i-1;
79
79
  }
80
80
  }
81
81
 
@@ -25,6 +25,15 @@ schema:
25
25
  type: boolean
26
26
  maxItems: 32
27
27
  minItems: 32
28
+
29
+ requirements:
30
+ idl(): |
31
+ for (U32 i = 3; i < 32; i++) {
32
+ (!HPM_COUNTER_EN[i]) -> !COUNTINHIBIT_EN[i];
33
+ }
34
+ reason: |
35
+ When mhpmcounter[i] is not implemented, it cannot be inhibited.
36
+
28
37
  definedBy:
29
38
  allOf:
30
39
  - extension:
@@ -8,7 +8,7 @@ kind: parameter
8
8
  name: HCONTEXT_AVAILABLE
9
9
  description: |
10
10
  Specifies if HCONTEXT is available
11
- long_name: TODO
11
+ long_name: HCONTEXT Availability
12
12
  schema:
13
13
  type: boolean
14
14
  definedBy:
@@ -11,7 +11,7 @@ description:
11
11
  `misa.H` bit.
12
12
 
13
13
  "
14
- long_name: TODO
14
+ long_name: "`misa.H` mutability"
15
15
  schema:
16
16
  type: boolean
17
17
  requirements:
@@ -11,7 +11,7 @@ description:
11
11
  `misa.S` bit.
12
12
 
13
13
  "
14
- long_name: TODO
14
+ long_name: "`misa.S` mutability"
15
15
  schema:
16
16
  type: boolean
17
17
  requirements:
data/lib/udb/config.rb CHANGED
@@ -238,7 +238,7 @@ module Udb
238
238
  def initialize(data, info)
239
239
  super(data, info)
240
240
 
241
- @param_values = @data.key?("params") ? @data["params"] : [].freeze
241
+ @param_values = @data.key?("params") ? @data["params"] : {}.freeze
242
242
 
243
243
  @mxlen = @data.dig("params", "MXLEN")
244
244
 
data/lib/udb/version.rb CHANGED
@@ -5,5 +5,5 @@
5
5
  # frozen_string_literal: true
6
6
 
7
7
  module Udb
8
- def self.version = "0.1.15"
8
+ def self.version = "0.1.16"
9
9
  end