pub mod fpr;
pub mod gpr;
pub mod vpr;
use crate::arch::regs::fpr::Fpr;
use crate::arch::regs::gpr::Gpr;
use crate::arch::regs::vpr::Vpr;
use crate::isa::reg::RegIdx;
use crate::isa::rvv::Vlen;
#[derive(Debug)]
pub struct RegisterFile {
gpr: Gpr,
fpr: Fpr,
vpr: Vpr,
}
impl Default for RegisterFile {
fn default() -> Self {
Self::new(Vlen::default())
}
}
impl RegisterFile {
pub fn new(vlen: Vlen) -> Self {
Self { gpr: Gpr::new(), fpr: Fpr::new(), vpr: Vpr::new(vlen) }
}
pub const fn vpr(&self) -> &Vpr {
&self.vpr
}
pub const fn vpr_mut(&mut self) -> &mut Vpr {
&mut self.vpr
}
pub const fn read(&self, idx: RegIdx) -> u64 {
self.gpr.read(idx)
}
pub const fn write(&mut self, idx: RegIdx, val: u64) {
self.gpr.write(idx, val);
}
pub const fn read_f(&self, idx: RegIdx) -> u64 {
self.fpr.read(idx)
}
pub const fn write_f(&mut self, idx: RegIdx, val: u64) {
self.fpr.write(idx, val);
}
pub const fn gpr(&self) -> &Gpr {
&self.gpr
}
}