Derive useful traits for enums
This commit is contained in:
parent
5a1ab837b4
commit
ac2ac6756b
@ -64,6 +64,7 @@ impl Flags {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Rounding Mode
|
/// Rounding Mode
|
||||||
|
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||||
pub enum RoundingMode {
|
pub enum RoundingMode {
|
||||||
RoundToNearestEven = 0b000,
|
RoundToNearestEven = 0b000,
|
||||||
RoundTowardsZero = 0b001,
|
RoundTowardsZero = 0b001,
|
||||||
|
@ -7,14 +7,14 @@ pub struct Mcause {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Trap Cause
|
/// Trap Cause
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||||
pub enum Trap {
|
pub enum Trap {
|
||||||
Interrupt(Interrupt),
|
Interrupt(Interrupt),
|
||||||
Exception(Exception),
|
Exception(Exception),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Interrupt
|
/// Interrupt
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||||
pub enum Interrupt {
|
pub enum Interrupt {
|
||||||
UserSoft,
|
UserSoft,
|
||||||
SupervisorSoft,
|
SupervisorSoft,
|
||||||
@ -29,7 +29,7 @@ pub enum Interrupt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Exception
|
/// Exception
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||||
pub enum Exception {
|
pub enum Exception {
|
||||||
InstructionMisaligned,
|
InstructionMisaligned,
|
||||||
InstructionFault,
|
InstructionFault,
|
||||||
|
@ -9,6 +9,7 @@ pub struct Misa {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Machine XLEN
|
/// Machine XLEN
|
||||||
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum MXL {
|
pub enum MXL {
|
||||||
XLEN32,
|
XLEN32,
|
||||||
XLEN64,
|
XLEN64,
|
||||||
|
@ -10,6 +10,7 @@ pub struct Mstatus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Additional extension state
|
/// Additional extension state
|
||||||
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum XS {
|
pub enum XS {
|
||||||
/// All off
|
/// All off
|
||||||
AllOff = 0,
|
AllOff = 0,
|
||||||
@ -25,6 +26,7 @@ pub enum XS {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Floating-point extension state
|
/// Floating-point extension state
|
||||||
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum FS {
|
pub enum FS {
|
||||||
Off = 0,
|
Off = 0,
|
||||||
Initial = 1,
|
Initial = 1,
|
||||||
@ -33,6 +35,7 @@ pub enum FS {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Machine Previous Privilege Mode
|
/// Machine Previous Privilege Mode
|
||||||
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum MPP {
|
pub enum MPP {
|
||||||
Machine = 3,
|
Machine = 3,
|
||||||
Supervisor = 1,
|
Supervisor = 1,
|
||||||
@ -40,6 +43,7 @@ pub enum MPP {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Supervisor Previous Privilege Mode
|
/// Supervisor Previous Privilege Mode
|
||||||
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum SPP {
|
pub enum SPP {
|
||||||
Supervisor = 1,
|
Supervisor = 1,
|
||||||
User = 0,
|
User = 0,
|
||||||
|
@ -7,6 +7,7 @@ pub struct Mtvec {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Trap mode
|
/// Trap mode
|
||||||
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum TrapMode {
|
pub enum TrapMode {
|
||||||
Direct = 0,
|
Direct = 0,
|
||||||
Vectored = 1,
|
Vectored = 1,
|
||||||
|
@ -70,12 +70,14 @@ impl Satp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(riscv32)]
|
#[cfg(riscv32)]
|
||||||
|
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||||
pub enum Mode {
|
pub enum Mode {
|
||||||
Bare = 0,
|
Bare = 0,
|
||||||
Sv32 = 1,
|
Sv32 = 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(riscv64)]
|
#[cfg(riscv64)]
|
||||||
|
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
|
||||||
pub enum Mode {
|
pub enum Mode {
|
||||||
Bare = 0,
|
Bare = 0,
|
||||||
Sv39 = 8,
|
Sv39 = 8,
|
||||||
|
@ -10,14 +10,14 @@ pub struct Scause {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Trap Cause
|
/// Trap Cause
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum Trap {
|
pub enum Trap {
|
||||||
Interrupt(Interrupt),
|
Interrupt(Interrupt),
|
||||||
Exception(Exception),
|
Exception(Exception),
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Interrupt
|
/// Interrupt
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum Interrupt {
|
pub enum Interrupt {
|
||||||
UserSoft,
|
UserSoft,
|
||||||
SupervisorSoft,
|
SupervisorSoft,
|
||||||
@ -29,7 +29,7 @@ pub enum Interrupt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Exception
|
/// Exception
|
||||||
#[derive(Copy, Clone, Debug)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum Exception {
|
pub enum Exception {
|
||||||
InstructionMisaligned,
|
InstructionMisaligned,
|
||||||
InstructionFault,
|
InstructionFault,
|
||||||
|
@ -10,14 +10,14 @@ pub struct Sstatus {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Supervisor Previous Privilege Mode
|
/// Supervisor Previous Privilege Mode
|
||||||
#[derive(Eq, PartialEq)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum SPP {
|
pub enum SPP {
|
||||||
Supervisor = 1,
|
Supervisor = 1,
|
||||||
User = 0,
|
User = 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Floating-point unit Status
|
/// Floating-point unit Status
|
||||||
#[derive(Eq, PartialEq)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum FS {
|
pub enum FS {
|
||||||
Off = 0,
|
Off = 0,
|
||||||
Initial = 1,
|
Initial = 1,
|
||||||
|
@ -7,6 +7,7 @@ pub struct Stvec {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Trap mode
|
/// Trap mode
|
||||||
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub enum TrapMode {
|
pub enum TrapMode {
|
||||||
Direct = 0,
|
Direct = 0,
|
||||||
Vectored = 1,
|
Vectored = 1,
|
||||||
|
Loading…
Reference in New Issue
Block a user