MNRET 会改变 MRET 或 SRET 吗?
不会。MRET 和 SRET 不受 mnstatus.NMIE 影响,也不会改变它;RNMI 返回由 MNRET 完成。
从 Smrnmi RNMI 处理程序返回:从 mnepc 恢复 PC,并从 mnstatus 恢复特权级/虚拟化状态。
MNRET 是 Smrnmi 增加的仅 M-mode 可执行返回指令。它使用 mnepc 和 mnstatus 返回到被 RNMI 打断时的 PC、特权级和虚拟化模式,设置 mnstatus.NMIE;若返回到低于 M-mode 的特权级,还会清除 mstatus.MPRV。
仅展示 Smrnmi 定义的 mnepc、MNPP/MNPV、NMIE 与条件性 MPRV 状态。
mnret假定 Smrnmi、U/S/M 和 H 已实现,支持切换 IALIGN;输入为已存储的 MXLEN 位 mnepc,bit 0 必须为零。MNPV 在 MNPP=M 时忽略。仅建模核心返回;不建模条件性 Zicfilp ELP 与 Smdbltrp/Ssdbltrp MDT/SDT 更新。步骤是教学视图。
MNRET 仅在 M-mode 执行,使用 mnepc 与 mnstatus 恢复 RNMI 打断的执行上下文,并置 NMIE=1。
假定 Smrnmi、M-mode、支持切换 IALIGN、已存储 mnepc=0x8042、当前 IALIGN=32、MNPP=S、MNPV=0。MNRET 返回 PC=0x8040、S-mode,置 NMIE=1 并清 MPRV;若 IALIGN=16,返回 PC=0x8042。条件性 ELP/双重 trap 状态未在此例建模。
不会。MRET 和 SRET 不受 mnstatus.NMIE 影响,也不会改变它;RNMI 返回由 MNRET 完成。