WPRI
WPRI/RV64RV64 `senvcfg` 高位保留写保留值字段;RV32 格式不包含这些位。
这个字段控制什么
- - RV64 `senvcfg` 高位保留写保留值字段;RV32 格式不包含这些位。
常见取值
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
监管者环境配置寄存器,控制 U 模式执行环境中的 FIOM、CBO、pointer masking、Zicfilp 和 Zicfiss 相关开关。
RV64 `senvcfg` 高位保留写保留值字段;RV32 格式不包含这些位。
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
Ssnpm 定义的 U/VU 模式 pointer masking 模式字段。未实现 Ssnpm 或在 RV32 上该字段为只读零。
Pointer masking 禁用,PMLEN=0。
保留编码;软件不应写入或依赖。
启用 pointer masking;RV64 上 PMLEN=7。
启用 pointer masking;RV64 上 PMLEN=16。
保留写保留值字段。
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
Zicboz 定义的 CBO.ZERO 使能。只有 S 模式也启用 CBO.ZERO 且 CBZE=1 时,U/VU 模式执行 CBO.ZERO 才被允许;未实现 Zicboz 时为只读零。
U/VU 模式 CBO.ZERO 触发非法指令异常,或该位因未实现 Zicboz 为只读零。
若 S 模式也启用 CBO.ZERO,则允许 U/VU 模式执行 CBO.ZERO。
Zicbom 定义的 CBO.CLEAN/CBO.FLUSH 使能。只有 S 模式也启用这些指令且 CBCFE=1 时,U/VU 模式执行才被允许;未实现 Zicbom 时为只读零。
U/VU 模式 CBO.CLEAN/CBO.FLUSH 触发非法指令异常,或该位因未实现 Zicbom 为只读零。
若 S 模式也启用 CBO.CLEAN/CBO.FLUSH,则允许 U/VU 模式执行。
Zicbom 定义的 CBO.INVAL 使能 WARL 字段;`10b` 保留。未实现 Zicbom 时为只读零。
U/VU 模式 CBO.INVAL 触发非法指令异常。
若 S 模式也启用,U/VU 模式 CBO.INVAL 以 CBO.FLUSH 行为执行。
保留编码;软件不应写入或依赖。
若 S 模式也启用并且 S 模式未强制 flush,U/VU 模式 CBO.INVAL 按 invalidate 行为执行。
Zicfiss 定义的 shadow stack enable。SSE=1 时在 U/VU 模式激活 Zicfiss;SSE=0 时 U/VU 模式 Zicfiss 保持不活动。未实现 Zicfiss 时为只读零。
U/VU 模式 Zicfiss 不活动;未实现 Zicfiss 时该位为只读零。
在 U/VU 模式激活 Zicfiss。
Zicfilp 定义的 landing pad enable。LPE=1 时在 U/VU 模式启用 Zicfilp;LPE=0 时 U/VU 模式不启用 Zicfilp。未实现 Zicfilp 时为只读零。
U/VU 模式不启用 Zicfilp;未实现 Zicfilp 时该位为只读零。
在 U/VU 模式启用 Zicfilp。
保留写保留值字段。
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
Fence of I/O implies Memory。FIOM=1 时,U 模式 FENCE 的设备 I/O 排序也隐含主存排序;当 `satp.MODE` 只读为 Bare 时实现可使 FIOM 只读零。
U 模式 FENCE 的 I/O 排序不隐含主存排序。
U 模式 I/O FENCE 排序也包括主存排序。
senvcfg 控制 U/VU 模式执行环境。当前官方格式包括 FIOM、LPE、SSE、CBIE、CBCFE、CBZE 和 RV64 PMM,并对未实现扩展定义只读零行为。
确认目标 hart 的相关扩展:Zicboz、Zicbom、Ssnpm、Zicfilp、Zicfiss 以及 `satp` 模式能力。
只修改需要的 senvcfg 字段并保留 WPRI 位。
读回确认 WARL/只读零字段接受的实际值。
不能只看 CSR 名称判断。官方 CSR 地址编码和表格给出最低访问特权级;senvcfg 当前记录为 S模式,权限不足或未实现时访问会触发非法指令异常。
不要把整个 CSR 当普通整数覆盖。应只修改目标字段,保留未修改位,并按规范处理 WARL、WLRL、WPRI 或保留字段。