Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

small fixes #530

Merged
merged 1 commit into from
Feb 10, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/insns/addi16sp_16bit.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ include::wavedrom/c-int-reg-immed.adoc[]
Add the non-zero sign-extended 6-bit immediate to the value in the stack pointer (`csp=c2`), where the immediate is scaled to represent multiples of 16 in the range (-512,496). Clear the tag if the resulting capability is
unrepresentable or `csp` is sealed.

include::malformed_clear_tag_csp.adoc[]

{cheri_int_mode_name} Description::

Add the non-zero sign-extended 6-bit immediate to the value in the stack pointer (`sp=x2`), where the immediate is scaled to represent multiples of 16 in the range (-512,496).
Expand Down
2 changes: 2 additions & 0 deletions src/insns/addi4spn_16bit.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ include::wavedrom/c-ciw.adoc[]

Add a zero-extended non-zero immediate, scaled by 4, to the stack pointer, `csp`, and writes the result to `cd'`. This instruction is used to generate pointers to stack-allocated variables. Clear the tag if the resulting capability is unrepresentable or `csp` is sealed.

include::malformed_clear_tag_csp.adoc[]

{cheri_int_mode_name} Description::

Add a zero-extended non-zero immediate, scaled by 4, to the stack pointer, `sp`, and writes the result to `rd'`. This instruction is used to generate pointers to stack-allocated variables.
Expand Down
2 changes: 2 additions & 0 deletions src/insns/malformed_clear_tag_csp.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
NOTE: This instruction sets `cd.tag=0` if `csp` 's bounds are <<section_cap_malformed,malformed>>,
or if any of the reserved fields are set.
4 changes: 2 additions & 2 deletions src/riscv-integration.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ privileged architecture specified in the RISC-V ISA.
=== Memory

A hart supporting {cheri_base_ext_name} has a single byte-addressable address
space of 2^XLEN^ bytes for all memory accesses. Each memory region capable of
space of 2^MXLEN^ bytes for all memory accesses. Each memory region capable of
Copy link
Collaborator

@andresag01 andresag01 Feb 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tariqkurd-repo @arichardson : This was correct and it was taken directly from the RISC-V unprivileged specification where it says (see Page 16 Section 1.4 here):

A RISC-V hart has a single byte-addressable address space of 2^XLEN^ bytes for all memory accesses.

It is meant to be the effective XLEN of the machine which can be MXLEN or SXLEN or UXLEN depending CSRs. The idea is that the byte-addressable memory space is just like in CHERI-less RISC-V so we are fully compatible, but capability bounds remain encoded in MXLEN width regardless of the effective XLEN.

holding a capability also stores a tag bit for each naturally aligned CLEN bits
(e.g. 16 bytes in RV64), so that capabilities with their tag set can only be
stored in naturally aligned addresses. Tags must be atomically bound to the
data they protect.

The memory address space is circular, so the byte at address
2^XLEN^ - 1 is adjacent to the byte at address zero. A capability's
2^MXLEN^ - 1 is adjacent to the byte at address zero. A capability's
<<section_cap_representable_check>> described in xref:section_cap_encoding[xrefstyle=short] is
also circular, so address 0 is within the <<section_cap_representable_check>> of a capability
where address 2^MXLEN^ - 1 is within the bounds.
Expand Down
Loading