Machine Status Register (mstatus)机器模式状态寄存器该寄存器记录了 m 模式下的状态。其中,MPP 记录了进入异常处理之前的模式,也是 mret 返回后要切换的模式,可以通过修改该位域改变接下来程序执行的模式。FS 域 是浮点状态和开关。MIE 为中断使能位。 当异常发生时 当异常发生时,处理器会做如下处理(用户模式下)...
* Disable the FPU/Vector to detect illegal usage of floating point * or vector in kernel space.*/li t0, SR_SUM|SR_FS_VS--禁用用户模式内存访问和FPU/Vector。REG_L s0, TASK_TI_USER_SP(tp) csrrc s1, CSR_STATUS, t0 csrr s2, CSR_EPC csrr s3, CSR_TVAL csrr s4, CSR_CAUSE csrr s5...
1.2 机器状态寄存器CSR_STATUS 如果机器硬件上支持浮点计算单元,通过CSR_STATUS寄存器可以启用或关闭浮点计算功能。其中,设置相应位就是启动浮点计算功能;清零相应位表示关闭浮点计算功能: 浮点在mstatus寄存器中配置: FS的不同状态包括: 不同FS状态含义如下: Off (00):浮点单元处于关闭状态,此时访问浮点相关寄存器会触发...
将mstatus.MPP写入 0 以将之前的模式设置为 User,这允许我们返回到该模式。 设置物理内存保护 (PMP) 区域以将所需区域授予用户和主管模式,并可选择从机器模式撤消权限。 用主管模式异常处理程序的基地址写入stvec CSR。 编写medeleg寄存器,将异常委托给主管模式。考虑ECALL和页面错误异常。 编写mstatus.FS以启用浮...
如果浮点单元状态字段 mstatus.FS 为"关",那么任何执行矢量浮点指令的尝试都将引发非法指令异常。任何修改浮点扩展状态(即浮点 CSR 或f 寄存器)的矢量浮点指令都必须将 mstatus.FS 设置为 Dirty。 如果执行了管理程序扩展且 V=1,则 vsstatus.FS 字段对矢量浮点指令额外有效。如果 vsstatus.FS 或mstatus.FS 为...
FS (Floating-Point Status) 位: 位置:位 13:14 描述:浮点状态位,用于指示浮点寄存器的状态。 取值: 00:浮点单元未使用 01:浮点单元已使用,保存状态 11:浮点单元已使用,需要保存状态 XS (Extension Status) 位: 位置:位 15:16 描述:扩展状态位,用于指示用户扩展寄存器的状态。
li t0, MSTATUS_FS | MSTATUS_XS | (0x01800000) csrs mstatus, t0 在启动代码中,通过0x01800000设置mstatus开启V扩展支持。 3.编译选项支持V扩展 默认情况下,平头哥提供的交叉编译工具链已支持了V扩展的编译。只需要在编译选项中开启即可。 从传递给riscv 的gcc的选项来看,带有v扩展即可。
mstatus Machine Status Register (mstatus) 机器模式状态寄存器 该寄存器记录了 m 模式下的状态。 其中,MPP 记录了进入异常处理之前的模式,也是 mret 返回后要切换的模式,可以通过修改该位域改变接下来程序执行的模式。 FS 域 是浮点状态和开关。MIE 为中断使能位。
li t0, MSTATUS_FS | MSTATUS_XS | (0x01800000) csrs mstatus, t0 在启动代码中,通过0x01800000设置mstatus开启V扩展支持。 3.编译选项支持V扩展 默认情况下,平头哥提供的交叉编译工具链已支持了V扩展的编译。只需要在编译选项中开启即可。 从传递给riscv 的gcc的选项来看,带有v扩展即可。
中断处理的第一条指令地址存储在mtvec中,mie寄存器(不是mstatus寄存器中的mie位)控制哪些中断可以被触发,只有对应位置置一的中断号的中断会触发。 中断处理完成之后需要返回,从机器模式的中断返回需要调用mret指令,它会 将 PC 设置为 mepc,通过将 mstatus 的 MPIE 域复制到MIE 来恢复之前的中断使能设置,并将权限...