فهرست منبع

Merge #9

9: use `NonZeroUsize` where appropriate r=dvc94ch a=strake



Co-authored-by: M Farkas-Dyck <strake888@gmail.com>
bors[bot] 6 سال پیش
والد
کامیت
591b7df808
2فایلهای تغییر یافته به همراه14 افزوده شده و 18 حذف شده
  1. 8 10
      src/register/misa.rs
  2. 6 8
      src/register/mvendorid.rs

+ 8 - 10
src/register/misa.rs

@@ -1,9 +1,11 @@
 //! misa register
 
+use core::num::NonZeroUsize;
+
 /// misa register
 #[derive(Clone, Copy, Debug)]
 pub struct Misa {
-    bits: usize,
+    bits: NonZeroUsize,
 }
 
 /// Machine XLEN
@@ -16,16 +18,16 @@ pub enum MXL {
 impl Misa {
     /// Returns the contents of the register as raw bits
     pub fn bits(&self) -> usize {
-        self.bits
+        self.bits.get()
     }
 
     /// Returns the machine xlen.
     pub fn mxl(&self) -> MXL {
         let value = match () {
             #[cfg(target_pointer_width = "32")]
-            () => (self.bits >> 30) as u8,
+            () => (self.bits() >> 30) as u8,
             #[cfg(target_pointer_width = "64")]
-            () => (self.bits >> 62) as u8,
+            () => (self.bits() >> 62) as u8,
         };
         match value {
             1 => MXL::XLEN32,
@@ -41,7 +43,7 @@ impl Misa {
         if bit > 25 {
             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
             // isn't implemented.
-            if r == 0 {
-                None
-            } else {
-                Some(Misa { bits: r })
-            }
+            NonZeroUsize::new(r).map(|bits| Misa { bits })
         },
         #[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
         () => unimplemented!(),

+ 6 - 8
src/register/mvendorid.rs

@@ -1,20 +1,22 @@
 //! mvendorid register
 
+use core::num::NonZeroUsize;
+
 /// mvendorid register
 #[derive(Clone, Copy, Debug)]
 pub struct Mvendorid {
-    bits: usize,
+    bits: NonZeroUsize,
 }
 
 impl Mvendorid {
     /// Returns the contents of the register as raw bits
     pub fn bits(&self) -> usize {
-        self.bits
+        self.bits.get()
     }
 
     /// Returns the JEDEC manufacturer ID
     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
             // csr isn't implemented.
-            if r == 0 {
-                None
-            } else {
-                Some(Mvendorid { bits: r })
-            }
+            NonZeroUsize::new(r).map(|bits| Mvendorid { bits })
         }
         #[cfg(not(any(target_arch = "riscv32", target_arch = "riscv64")))]
         () => unimplemented!(),