use bit_field::BitField;
use riscv::{clear, read_csr_as, set, set_clear_csr, write_csr};
#[derive(Copy, Clone, Debug)]
pub struct Hie {
bits: usize,
}
impl Hie {
#[inline]
pub fn bits(&self) -> usize {
self.bits
}
#[inline]
pub fn from_bits(x: usize) -> Self {
Hie { bits: x }
}
#[inline]
pub unsafe fn write(&self) {
unsafe { _write(self.bits) };
}
#[inline]
pub fn vssie(&self) -> bool {
self.bits.get_bit(2)
}
#[inline]
pub fn set_vssie(&mut self, val: bool) {
self.bits.set_bit(2, val);
}
#[inline]
pub fn vstie(&self) -> bool {
self.bits.get_bit(6)
}
#[inline]
pub fn set_vstie(&mut self, val: bool) {
self.bits.set_bit(6, val);
}
#[inline]
pub fn vseie(&self) -> bool {
self.bits.get_bit(10)
}
#[inline]
pub fn set_vseie(&mut self, val: bool) {
self.bits.set_bit(10, val);
}
#[inline]
pub fn sgeie(&self) -> bool {
self.bits.get_bit(12)
}
#[inline]
pub fn set_sgeie(&mut self, val: bool) {
self.bits.set_bit(12, val);
}
}
read_csr_as!(Hie, 0x604);
write_csr!(0x604);
set!(0x604);
clear!(0x604);
set_clear_csr!(
, set_vssie, clear_vssie, 1 << 2);
set_clear_csr!(
, set_vstie, clear_vstie, 1 << 6);
set_clear_csr!(
, set_vseie, clear_vseie, 1 << 10);
set_clear_csr!(
, set_sgeie, clear_sgeie, 1 << 12);