它是用户态普通指令吗?
不是。该类指令受特权级和扩展支持约束,用户态是否可执行必须看官方特权规则。
SRET 使用 opcode 1110011(0x73)、funct3 000、funct12 000100000010。rs1 字段选择源寄存器,12 位立即数提供第二操作数,rd 选择目标寄存器。
SRET 从 supervisor 陷阱处理程序返回:pc 设置为 sepc,当前特权级恢复为 sstatus.SPP,SIE 恢复为 SPIE,SPIE 置 1,SPP 置 0。SRET 可在 S-mode 或更高特权级执行;若 mstatus.TSR=1,在 S-mode 执行会触发非法指令异常。U-mode 执行 SRET 也会触发非法指令异常。
SRET 是特权架构定义的系统级指令,页面说明只覆盖官方规定的架构语义,不推断平台固件策略。
结合 «sret # Return from S-mode trap» 等实际代码理解该场景。
不是。该类指令受特权级和扩展支持约束,用户态是否可执行必须看官方特权规则。
不能简单替代。地址转换、指令获取和数据内存排序分别有不同的 fence/失效指令。