vsireg3
Virtual Supervisor Indirect Register Alias 3
The vsireg3 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 vsireg3, or from VU-mode to access siselect or siregX
.
The behavior of accesses to vsireg3 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 vsireg3.
Attributes
Defining Extension |
|
---|---|
CSR Address |
0x253 |
Virtual CSR Address |
0x253 |
Length |
32 when CSR[hstatus].VSXL == 0 64 when CSR[hstatus].VSXL == 1 |
Privilege Mode |
VS |
Format
This CSR format changes dynamically.
Field Summary
Name | Location | Type | Reset Value |
---|---|---|---|
* 31:0 when CSR[hstatus].VSXL == 0 * 63:0 when CSR[hstatus].VSXL == 1 |
RW |
UNDEFINED_LEGAL |
Software write
This CSR may store a value that is different from what software attempts to write.
When a software write occurs (e.g., through csrrw), the following determines the written value:
VALUE = Csr handle = indirect_csr_lookup(CSR[vsiselect].VALUE, 3); 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.
Csr handle = indirect_csr_lookup(vsiselect.VALUE, 3);
if (!handle.valid) {
unimplemented_csr($encoding);
}
return csr_sw_read(handle);