eeric 0.0.21

An easily embeddable RV64I core with MFDV extensions
Documentation
pub mod aliases;
mod csr;
mod float;
mod integer;
pub mod vector;

use std::{rc::Rc, cell::RefCell};

use super::{snapshot::Snapshotable, vector_engine::VectorEngine};

pub use csr::CsrRegisters;
pub use float::FloatRegisters;
pub use integer::IntegerRegisters;
pub use vector::VectorRegisters;

#[derive(Clone, Default)]
#[cfg_attr(debug_assertions, derive(Debug))]
pub struct Registers {
    pub pc: u64,
    pub x: IntegerRegisters,
    pub c: CsrRegisters,
    pub f: FloatRegisters,
    pub v: VectorRegisters,
}

#[derive(Clone)]
#[cfg_attr(debug_assertions, derive(Debug))]
pub struct RegistersSnapshot {
    pub x: [u64; 32],
    pub c: [u64; 4096],
    pub f: [f64; 32],
    pub v: Vec<u8>,
    pub pc: u64,
}

impl Snapshotable for Registers {
    type Snapshot = RegistersSnapshot;
    
    fn snapshot(&self) -> RegistersSnapshot {
        RegistersSnapshot {
            x: self.x.snapshot(),
            c: self.c.snapshot(),
            f: self.f.snapshot(),
            v: self.v.snapshot(),
            pc: self.pc,
        }
    }
}

impl Default for RegistersSnapshot {
    fn default() -> Self {
        Self { 
            x: [0; 32], 
            c: [0; 4096], 
            f: [0.0; 32],
            v: Vec::new(), 
            pc: 0
        }
    }
}