* 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...
将mstatus.MPP写入 0 以将之前的模式设置为 User,这允许我们返回到该模式。 设置物理内存保护 (PMP) 区域以将所需区域授予用户和主管模式,并可选择从机器模式撤消权限。 用主管模式异常处理程序的基地址写入stvecCSR。 编写medeleg寄存器,将异常委托给主管模式。 考虑ECALL和页面错误异常。 编写mstatus.FS以启用浮...
Machine Status Register (mstatus) 机器模式状态寄存器 该寄存器记录了 m 模式下的状态。 其中,MPP 记录了进入异常处理之前的模式,也是 mret 返回后要切换的模式,可以通过修改该位域改变接下来程序执行的模式。 FS 域 是浮点状态和开关。 MIE 为中断使能位。 当异常发生时 当异常发生时,处理器会做如下处理(用户...
其定义类似于浮点上下文状态字段 FS。 当试图执行任何矢量指令或访问矢量 CSR 时,都会引发非法指令异常,mstatus.VS 设置为关。 当mstatus.VS 设置为Initial 或 Clean 时,执行任何改变矢量状态的指令(包括矢量 CSR)都会将 mstatus.VS 变为 Dirty。即使在矢量状态没有变化的情况下,执行程序也可以随时将mstatus.VS...
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扩展即可。
li t0, SR_FS csrc CSR_STATUS, t0 选择一个核启动 /* 选择一个核启动 */ la a3, hart_lottery li a2, 1 amoadd.w a3, a2, (a3) bnez a3, .Lsecondary_start 清楚bss段 /* 清除bss */ la a3, __bss_start la a4, __bss_stop ...
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 来恢复之前的中断使能设置,并将权限...