CSR 指令里的 atomic 是内存原子吗?
不是。Zicsr 里的 atomic 指 CSR 读和写在同一条 CSR 指令中完成,不是对内存地址执行 AMO。
读取 CSR 旧值到 rd,并以 5-bit uimm 为掩码置位 CSR;uimm=0 时不写 CSR
CSRRSI 是 CSRRS 的立即数形式:读取 CSR 旧值并零扩展到 XLEN 写入 rd,再把 5-bit 无符号 uimm 作为低位掩码,对应置位目标 CSR。若 uimm=0,指令不写 CSR,也不产生 CSR 写副作用;此时仍读取 CSR。
展示 Zicsr CSR 读-改-写的 ISA 可见流程:解析 SYSTEM 编码、读取 CSR、按写/置位/清位语义计算,再更新 rd 与 CSR。
CSR 名称/地址属于指令语法;旧 CSR 值和 rs1 示例值属于执行上下文。动画不赋予示例 CSR 任何具体平台字段含义。
CSRRSI 是 Zicsr 定义的 I-type SYSTEM 指令,CSR 地址位于 bits 31..20。
位级视图显示当前 XLEN 的 CSR 值计算。
该动画只展示 Zicsr 定义的 ISA 可见 CSR 读写、副作用抑制和位掩码语义;不模拟具体 CSR 字段含义、异常处理器、流水线或时序。
CSRRSI 用 5-bit uimm 的 1 位作为置位掩码。uimm=0 时读 CSR 但不写 CSR。
结合 «csrrsi x5, mstatus, 1 # x5 = old mstatus; set bit 0 in mstatus» 等实际代码理解该场景。
结合 «csrrsi x5, mstatus, 1 # x5 = old mstatus; set bit 0 in mstatus» 等实际代码理解该场景。
不是。Zicsr 里的 atomic 指 CSR 读和写在同一条 CSR 指令中完成,不是对内存地址执行 AMO。
不一样。rd=x0 只在 CSRRW/CSRRWI 中抑制 CSR 读取;rs1=x0 或 uimm=0 只在 CSRRS/CSRRC 及其立即数形式中抑制 CSR 写入。