moa_archreg 0.1.4

架构系统寄存器与异常编码常量定义
Documentation
//! riscv64 架构常量定义

// ---- scause 异常码 ----

pub const EXC_INSN_MISALIGNED: usize = 0;
pub const EXC_INSN_ACCESS: usize = 1;
pub const EXC_INSN_ILLEGAL: usize = 2;
pub const EXC_BREAKPOINT: usize = 3;
pub const EXC_LOAD_MISALIGNED: usize = 4;
pub const EXC_LOAD_ACCESS: usize = 5;
pub const EXC_STORE_MISALIGNED: usize = 6;
pub const EXC_STORE_ACCESS: usize = 7;
pub const EXC_ECALL_U: usize = 8;
pub const EXC_ECALL_S: usize = 9;
pub const EXC_INSN_PAGE_FAULT: usize = 12;
pub const EXC_LOAD_PAGE_FAULT: usize = 13;
pub const EXC_STORE_PAGE_FAULT: usize = 15;

// ---- sstatus 位定义(补充) ----

/// sstatus.FS 位域(浮点状态)
pub const SSTATUS_FS: usize = 3 << 13;
/// sstatus.FS = Initial(0b01)——惰性 FP 打开时写回的状态
pub const SSTATUS_FS_INITIAL: usize = 1 << 13;
/// sstatus.VS 位域(向量状态)。与 [`SSTATUS_FS`] 对称备齐;boot 关 FP/Vector 的清位在
/// `arch::riscv64::boot` 的内联汇编里以字面量完成(汇编串无法引用 Rust 常量),故此处暂无消费方。
pub const SSTATUS_VS: usize = 3 << 9;

// ---- CSR 相关位定义 ----

pub const SSTATUS_SIE: usize = 1 << 1;
pub const SSTATUS_SPIE: usize = 1 << 5;
pub const SSTATUS_SPP: usize = 1 << 8;
/// sstatus.SUM — 允许 S-mode 访问 U-mode 页
pub const SSTATUS_SUM: usize = 1 << 18;

/// sip.SSIP — S-mode 软件中断挂起位
pub const SIP_SSIP: usize = 1 << 1;

/// scause 最高位:中断标志
pub const SCAUSE_INTERRUPT: usize = 1 << 63;

pub const IRQ_S_SOFT: usize = 1;
pub const IRQ_S_TIMER: usize = 5;
pub const IRQ_S_EXT: usize = 9;

// ---- satp ----

pub const SATP_MODE_SHIFT: usize = 60;
pub const SATP_MODE_SV39: usize = 8 << SATP_MODE_SHIFT;
/// satp.ASID 字段位偏移(Sv39:`satp[59:44]`)
pub const SATP_ASID_SHIFT: usize = 44;
/// satp.ASID 字段最大宽度掩码
pub const SATP_ASID_MASK: usize = 0xFFFF;