hstatus
Attributes
Defining Extension |
|
---|---|
CSR Address |
0x600 |
Length |
32 when CSR[mstatus].SXL == 0 64 when CSR[mstatus].SXL == 1 |
Privilege Mode |
S |
Format
This CSR format changes dynamically.
Field Summary
Name | Location | Type | Reset Value |
---|---|---|---|
33:32 |
[when,"(VSXLEN == 32 || VSXLEN == 64)"] RO [when,"!(VSXLEN == 32 || VSXLEN == 64)"] RW |
[when,"(VSXLEN == 32)"] 0 [when,"(VSXLEN == 64)"] 1 [when,"else"] UNDEFINED_LEGAL |
|
22 |
RW |
UNDEFINED_LEGAL |
|
21 |
RW |
UNDEFINED_LEGAL |
|
20 |
RW |
UNDEFINED_LEGAL |
|
17:12 |
[when,"(NUM_EXTERNAL_GUEST_INTERRUPTS == 63)"] RW [when,"(NUM_EXTERNAL_GUEST_INTERRUPTS != 63)"] RW-R |
UNDEFINED_LEGAL |
|
9 |
RW |
UNDEFINED_LEGAL |
|
8 |
RW |
UNDEFINED_LEGAL |
|
7 |
RW |
UNDEFINED_LEGAL |
|
6 |
RW |
UNDEFINED_LEGAL |
|
5 |
[when,"(VS_MODE_ENDIANESS == "dynamic")"] RW [when,"(VS_MODE_ENDIANESS != "dynamic")"] RO |
[when,"(VS_MODE_ENDIANESS == "little")"] 0 [when,"(VS_MODE_ENDIANESS == "big")"] 1 [when,"else"] 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:
VSXL = if (CSR[mstatus].SXL < csr_value.VSXL) { # cannot set VSXLEN less than SXLEN return UNDEFINED_LEGAL_DETERMINISTIC; } else if ((csr_value.VSXL & 0b10) != 0) { # MSB of VSXL represents XLEN > 64, which isn't legal return UNDEFINED_LEGAL_DETERMINISTIC; } else { return csr_value.VSXL; } VTSR = csr_value.VTSR VTW = csr_value.VTW VTVM = csr_value.VTVM VGEIN = if (csr_value.VGEIN <= NUM_EXTERNAL_GUEST_INTERRUPTS) { return csr_value.VGEIN; } else { return ILLEGAL_WLRL; } HU = csr_value.HU SPVP = csr_value.SPVP SPV = csr_value.SPV GVA = csr_value.GVA VSBE = csr_value.VSBE