diff --git a/src/riscv-integration.adoc b/src/riscv-integration.adoc index 23823276..a232febd 100644 --- a/src/riscv-integration.adoc +++ b/src/riscv-integration.adoc @@ -491,16 +491,23 @@ the address. The tag of the capability written to <> is cleared if either check fails. Additionally, when MODE=Vectored the capability has its tag bit cleared if the -capability address + 4 x HICAUSE is not within the representable bounds. +capability address + 4 x HICAUSE is not within the <>. HICAUSE is the largest exception cause value that the implementation can write -to <> when an interrupt is taken. +to <> or <>/<> when an interrupt is taken. NOTE: When MODE=Vectored, it is only required that address + 4 x HICAUSE is -within representable bounds instead of the capability's bounds. This ensures +within the <> instead of the capability's bounds. +This ensures that software is not forced to allocate a capability granting access to more memory for the trap-vector than necessary to handle the trap causes that actually occur in the system. +NOTE: When MODE=Vectored, if either the capability address _or_ the capability +address + 4 x HICAUSE are invalid then the <> rules +are followed which may require the tag to be cleared. In particular, if any part +of the range is in the invalid address space then clearing the tag is strongly +recommended. + [#mscratch, reftext="mscratch"] ==== Machine Scratch Register (mscratch)