You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Also update table to clarify the SL value for GCPERM.
Fixes#426Fixes#428
Signed-off-by: Tariq Kurd <tariq.kurd@codasip.com>
Co-authored-by: Alexander Richardson <alexrichardson@google.com>
| 1 (RV32 only) | <<asr_perm>> | All other permissions are set.
50
+
| 2 | <<c_perm>> | <<r_perm>> or <<w_perm>>
51
+
| 3 (RV32 only) | <<c_perm>> | <<r_perm>>
52
+
| 4 (RV32 only) | <<x_perm>> | <<r_perm>>
53
+
| 5 (RV32 only) | <<w_perm>> | not(<<c_perm>>) or <<lm_perm>>
54
+
| 6 (RV32 only) | <<x_perm>> | <<w_perm>> or <<c_perm>>
55
+
| 7 | <<el_perm>> | <<c_perm>> and <<r_perm>>
56
+
| 8 | <<lm_perm>> | <<c_perm>> and <<r_perm>>
57
+
| 9 | <<sl_perm>> | <<c_perm>>
58
+
| 10 (RV32 only) | <<x_perm>> | (<<c_perm>> and <<lm_perm>> and <<el_perm>> and (<<sl_perm>> == ∞)) or +
59
+
(not(<<c_perm>> and not(<<lm_perm>>) and not(<<el_perm>>) and (<<sl_perm>>==0)))^1^
60
+
| 11 | <<asr_perm>> | <<x_perm>>
61
+
| 12 | <<m_bit>> | <<x_perm>>
62
+
|===
63
+
64
+
^1^ All the listed permissions in the set are either minimum or maximum.
65
+
66
+
The behaviour of currently illegal combinations from <<acperm_rules>> is to clear the permission if invalid (or in the case of <<sl_perm>> set it to 0 (_local_)).
67
+
68
+
* For RV64 all such combinations may be redefined by future extensions.
69
+
* The RV32 only rules are added because they remove combinations which do not meet the encoding requirements for <<cap_perms_encoding32>>, or
70
+
<<cap_perms_encoding_levels32>> if <<cheri_levels_ext,{cheri_levels_ext_name}>> is implemented.
^1^ SL isn't applicable in these cases, but this value is reported by <<GCPERM>> to simplify the rules followed by <<ACPERM>>
102
+
101
103
[#section_cap_level_change]
102
104
=== Changing capability levels and permissions
103
105
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