Skip to content

Commit b950a5d

Browse files
fix removing SL from quadrant 1
1 parent 2c940c5 commit b950a5d

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

src/insns/acperm_32bit.adoc

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ The rules from <<acperm_rules>> must be followed when removing permissions.
5050
| 6 (RV32 only) | <<x_perm>> | <<w_perm>> or <<c_perm>>
5151
| 7 | <<el_perm>> | <<c_perm>> and <<r_perm>>
5252
| 8 | <<lm_perm>> | <<c_perm>> and <<r_perm>>
53-
| 9 (RV32 only) | <<x_perm>> | <<c_perm>> == <<lm_perm>> == <<el_perm>>
53+
| 9 (RV32 only) | <<x_perm>> | (<<c_perm>> == <<lm_perm>> == <<el_perm>>) and (<<sl_perm>> == ∞)
5454
| 10 | <<sl_perm>> | <<c_perm>>
5555
| 11 | <<asr_perm>> | <<x_perm>>
5656
| 12 | <<m_bit>> | <<x_perm>>

src/level-ext.adoc

+6-4
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,14 @@ endif::[]
7474
11+| bit[0] - <<m_bit>> ({CAP_MODE_VALUE}-{cheri_cap_mode_name}, {INT_MODE_VALUE}-{cheri_int_mode_name})
7575
|Bits[4:3]| R | W | C | LM | EL | SL | X | ASR | Mode^1^ |
7676
| 0-1 | ✔ | ✔ | ✔ | ✔ | ✔ | ∞ | ✔ | ✔ | Mode^1^ | Execute + ASR (see <<infinite-cap>>)
77-
| 2-3 | ✔ | | ✔ | ✔ | ✔ | ∞ | ✔ | | Mode^1^ | Execute + Data & Cap RO
77+
| 2-3 | ✔ | | ✔ | ✔ | ✔ | ∞^1^| ✔ | | Mode^1^ | Execute + Data & Cap RO
7878
| 4-5 | ✔ | ✔ | ✔ | ✔ | ✔ | ∞ | ✔ | | Mode^1^ | Execute + Data & Cap RW
79-
| 6-7 | ✔ | ✔ | | | | N/A | ✔ | | Mode^1^ | Execute + Data RW
79+
| 6-7 | ✔ | ✔ | | | | ∞^1^| ✔ | | Mode^1^ | Execute + Data RW
8080
11+| *Quadrant 2: Restricted capability data read/write*
8181
11+| bit[2] = write, bit[1:0] = store level. R and C implicitly granted, LM dependent on W permission.
8282
|Bits[4:3]| R | W | C | LM | EL | SL | X | ASR | Mode^1^ |
8383
| 0-2 10+| reserved
84-
| 3 | ✔ | | ✔ | | | N/A | | | N/A | Data & Cap R0 (without <<lm_perm>>)
84+
| 3 | ✔ | | ✔ | | | ∞^1^ | | | N/A | Data & Cap R0 (without <<lm_perm>>)
8585
| 4 | ✔ | ✔ | ✔ | ✔ | | _(3)_ | | | N/A | Reserved for `LVLBITS=2`
8686
| 5 | ✔ | ✔ | ✔ | ✔ | | _(2)_ | | | N/A | Reserved for `LVLBITS=2`
8787
| 6 | ✔ | ✔ | ✔ | ✔ | | 1 | | | N/A | Data & Cap RW (with store _local_, no <<el_perm>>)
@@ -91,13 +91,15 @@ endif::[]
9191
11+| _Reserved bits for future extensions must be 1 so they are implicitly granted_
9292
|Bits[4:3]| R | W | C | LM | EL | SL | X | ASR | Mode^1^ |
9393
| 0-2 10+| reserved
94-
| 3 | ✔ | | ✔ | ✔ | ✔ | N/A | | | N/A | Data & Cap R0
94+
| 3 | ✔ | | ✔ | ✔ | ✔ | ∞^1^ | | | N/A | Data & Cap R0
9595
| 4 | ✔ | ✔ | ✔ | ✔ | ✔ | _(3)_ | | | N/A | Reserved for `LVLBITS=2`
9696
| 5 | ✔ | ✔ | ✔ | ✔ | ✔ | _(2)_ | | | N/A | Reserved for `LVLBITS=2`
9797
| 6 | ✔ | ✔ | ✔ | ✔ | ✔ | 1 | | | N/A | Data & Cap RW (with store _local_)
9898
| 7 | ✔ | ✔ | ✔ | ✔ | ✔ | 0 | | | N/A | Data & Cap RW (no store _local_)
9999
|==============================================================================
100100

101+
^1^ SL isn't applicable in these cases, but is specified as ∞ to help the definition of <<ACPERM>>
102+
101103
[#section_cap_level_change]
102104
=== Changing capability levels and permissions
103105
While capability levels (<<section_cap_level,CL>>) are conceptually a label on the capability rather than a permission granted by the capability, they are adjusted using the <<ACPERM>> instruction.

0 commit comments

Comments
 (0)