vsireg
Virtual Supervisor Indirect Register Alias
The vsireg CSR is one of several alias registers used to indirectly access virtual supervisor-level CSRs in VS-mode or VU-mode.
The alias mechanism allows indirect CSR access, which helps in virtualization and future extensibility.
A virtual instruction exception is raised for attempts from VS-mode or VU-mode to directly access vsiselect or vsireg, or from VU-mode to access siselect or sireg.
The behavior of accesses to vsireg when vsiselect holds a value that is not implemented at the HS level is UNSPECIFIED.
Implementations are recommended to raise an illegal instruction exception for accesses to unimplemented targets via vsireg.
Attributes
CSR Address |
0x251 |
|---|---|
Virtual CSR Address |
0x251 |
Defining extension |
|
Length |
64-bit |
Privilege Mode |
VS |
Fields
VALUE
- Location
-
vsireg[63:0] - Description
-
The data read from or written to the register selected by the current value of the vsiselect CSR.
- Type
RW |
Read-Write Field is writable by software. Any value that fits in the field is acceptable and shall be retained for subsequent reads. |
- Reset value
-
UNDEFINED_LEGAL
- Software write
-
This field has special behavior when written by software (e.g., through csrrw).
When software tries to write
csr_value, the field will be written with the return value of the function below.Csr handle = indirect_csr_lookup(PrivilegeMode::VS, CSR[vsiselect].VALUE, 1); if (!handle.valid) { unimplemented_csr($encoding); } if (!handle.writable) { raise(ExceptionCode::IllegalInstruction, mode(), $encoding); } csr_sw_write(handle, csr_value.VALUE); return csr_hw_read(handle);
Software read
This CSR may return a value that is different from what is stored in hardware.
-
Pruned
-
Original
Csr handle = indirect_csr_lookup(PrivilegeMode::VS, CSR[vsiselect].VALUE, 1);
if (!handle.valid) {
unimplemented_csr($encoding);
}
return csr_sw_read(handle);
Csr handle = indirect_csr_lookup(PrivilegeMode::VS, CSR[vsiselect].VALUE, 1);
if (!handle.valid) {
unimplemented_csr($encoding);
}
return csr_sw_read(handle);