From 6a2bdbf38de1e4c486ef08ac48d79782795d582d Mon Sep 17 00:00:00 2001 From: Vadim Kaushan Date: Mon, 18 Mar 2019 18:25:16 +0300 Subject: [PATCH] Refactoring --- src/register/mstatus.rs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/register/mstatus.rs b/src/register/mstatus.rs index 667ef7b..16ea4e1 100644 --- a/src/register/mstatus.rs +++ b/src/register/mstatus.rs @@ -49,43 +49,43 @@ impl Mstatus { /// User Interrupt Enable #[inline] pub fn uie(&self) -> bool { - self.bits & (1 << 0) == 1 << 0 + self.bits.get_bit(0) } /// Supervisor Interrupt Enable #[inline] pub fn sie(&self) -> bool { - self.bits & (1 << 1) == 1 << 1 + self.bits.get_bit(1) } /// Machine Interrupt Enable #[inline] pub fn mie(&self) -> bool { - self.bits & (1 << 3) == 1 << 3 + self.bits.get_bit(3) } /// User Previous Interrupt Enable #[inline] pub fn upie(&self) -> bool { - self.bits & (1 << 4) == 1 << 4 + self.bits.get_bit(4) } /// Supervisor Previous Interrupt Enable #[inline] pub fn spie(&self) -> bool { - self.bits & (1 << 5) == 1 << 5 + self.bits.get_bit(5) } /// User Previous Interrupt Enable #[inline] pub fn mpie(&self) -> bool { - self.bits & (1 << 7) == 1 << 7 + self.bits.get_bit(7) } /// Supervisor Previous Privilege Mode #[inline] pub fn spp(&self) -> SPP { - match self.bits & (1 << 8) == (1 << 8) { + match self.bits.get_bit(8) { true => SPP::Supervisor, false => SPP::User, } @@ -94,7 +94,7 @@ impl Mstatus { /// Machine Previous Privilege Mode #[inline] pub fn mpp(&self) -> MPP { - match (self.bits & (0b11 << 11)) >> 11 { + match self.bits.get_bits(11..13) { 0b00 => MPP::User, 0b01 => MPP::Supervisor, 0b11 => MPP::Machine, @@ -141,26 +141,33 @@ clear!(0x300, __clear_mstatus); set_clear_csr!( /// User Interrupt Enable , set_uie, clear_uie, 1 << 0); + set_clear_csr!( /// Supervisor Interrupt Enable , set_sie, clear_sie, 1 << 1); + set_clear_csr!( /// Machine Interrupt Enable , set_mie, clear_mie, 1 << 3); + set_csr!( /// User Previous Interrupt Enable , set_upie, 1 << 4); + set_csr!( /// Supervisor Previous Interrupt Enable , set_spie, 1 << 5); + set_csr!( /// Machine Previous Interrupt Enable , set_mpie, 1 << 7); + /// Supervisor Previous Privilege Mode #[inline] pub unsafe fn set_spp(spp: SPP) { _set((spp as usize) << 8); } + /// Machine Previous Privilege Mode #[inline] pub unsafe fn set_mpp(mpp: MPP) {