use `NonZeroUsize` where appropriate
This commit is contained in:
parent
8d530616c9
commit
5a88960ee0
|
@ -1,9 +1,11 @@
|
||||||
//! misa register
|
//! misa register
|
||||||
|
|
||||||
|
use core::num::NonZeroUsize;
|
||||||
|
|
||||||
/// misa register
|
/// misa register
|
||||||
#[derive(Clone, Copy, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
pub struct Misa {
|
pub struct Misa {
|
||||||
bits: usize,
|
bits: NonZeroUsize,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Machine XLEN
|
/// Machine XLEN
|
||||||
|
@ -16,16 +18,16 @@ pub enum MXL {
|
||||||
impl Misa {
|
impl Misa {
|
||||||
/// Returns the contents of the register as raw bits
|
/// Returns the contents of the register as raw bits
|
||||||
pub fn bits(&self) -> usize {
|
pub fn bits(&self) -> usize {
|
||||||
self.bits
|
self.bits.get()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the machine xlen.
|
/// Returns the machine xlen.
|
||||||
pub fn mxl(&self) -> MXL {
|
pub fn mxl(&self) -> MXL {
|
||||||
let value = match () {
|
let value = match () {
|
||||||
#[cfg(target_pointer_width = "32")]
|
#[cfg(target_pointer_width = "32")]
|
||||||
() => (self.bits >> 30) as u8,
|
() => (self.bits() >> 30) as u8,
|
||||||
#[cfg(target_pointer_width = "64")]
|
#[cfg(target_pointer_width = "64")]
|
||||||
() => (self.bits >> 62) as u8,
|
() => (self.bits() >> 62) as u8,
|
||||||
};
|
};
|
||||||
match value {
|
match value {
|
||||||
1 => MXL::XLEN32,
|
1 => MXL::XLEN32,
|
||||||
|
@ -41,7 +43,7 @@ impl Misa {
|
||||||
if bit > 25 {
|
if bit > 25 {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
self.bits & (1 >> bit) == (1 >> bit)
|
self.bits() & (1 >> bit) == (1 >> bit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,11 +59,7 @@ pub fn read() -> Option<Misa> {
|
||||||
}
|
}
|
||||||
// When misa is hardwired to zero it means that the misa csr
|
// When misa is hardwired to zero it means that the misa csr
|
||||||
// isn't implemented.
|
// isn't implemented.
|
||||||
if r == 0 {
|
NonZeroUsize::new(r).map(|bits| Misa { bits })
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(Misa { bits: r })
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
|
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
|
||||||
() => unimplemented!(),
|
() => unimplemented!(),
|
||||||
|
|
|
@ -1,20 +1,22 @@
|
||||||
//! mvendorid register
|
//! mvendorid register
|
||||||
|
|
||||||
|
use core::num::NonZeroUsize;
|
||||||
|
|
||||||
/// mvendorid register
|
/// mvendorid register
|
||||||
#[derive(Clone, Copy, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
pub struct Mvendorid {
|
pub struct Mvendorid {
|
||||||
bits: usize,
|
bits: NonZeroUsize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Mvendorid {
|
impl Mvendorid {
|
||||||
/// Returns the contents of the register as raw bits
|
/// Returns the contents of the register as raw bits
|
||||||
pub fn bits(&self) -> usize {
|
pub fn bits(&self) -> usize {
|
||||||
self.bits
|
self.bits.get()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the JEDEC manufacturer ID
|
/// Returns the JEDEC manufacturer ID
|
||||||
pub fn jedec_manufacturer(&self) -> usize {
|
pub fn jedec_manufacturer(&self) -> usize {
|
||||||
self.bits >> 7
|
self.bits() >> 7
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,11 +32,7 @@ pub fn read() -> Option<Mvendorid> {
|
||||||
}
|
}
|
||||||
// When mvendorid is hardwired to zero it means that the mvendorid
|
// When mvendorid is hardwired to zero it means that the mvendorid
|
||||||
// csr isn't implemented.
|
// csr isn't implemented.
|
||||||
if r == 0 {
|
NonZeroUsize::new(r).map(|bits| Mvendorid { bits })
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(Mvendorid { bits: r })
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
|
#[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
|
||||||
() => unimplemented!(),
|
() => unimplemented!(),
|
||||||
|
|
Loading…
Reference in New Issue