2个版本
0.1.2 | 2023年11月2日 |
---|---|
0.1.0 | 2023年10月29日 |
#59 在 #embeddable
355KB
11K SLoC
eeric
易于嵌入的RISC-V核心
概述
eeric是一个支持Zicsr、M、F、D和V扩展的RV64I核心,主要用于WASM编译,尽管它也可以与任何cdylib目标一起工作。它作为一个抽象的后端机器,需要一个前端编译器或解释器(参见libs/eeric-interpreter)。
示例
如以下所示,RISCV Vector Spec示例中的矢量化memcpy算法在eeric_core
中表示
use eeric_core::prelude::*;
fn main() {
let mut core = RvCore::with_instructions(vec![
I::Vsetvli(F::Vsetvli {
rd: T0,
rs1: A2,
vtypei: 0b_1_1_000_011,
}),
I::Vlv {
eew: 8,
data: F::Vl {
vd: 0,
rs1: A1,
vm: false,
},
},
I::Add(F::R {
rd: A1,
rs1: A1,
rs2: T0,
}),
I::Sub(F::R {
rd: A2,
rs1: A2,
rs2: T0,
}),
I::Vsv {
eew: 8,
data: F::Vs {
vs3: 0,
rs1: A3,
vm: false,
},
},
I::Add(F::R {
rd: A3,
rs1: A3,
rs2: T0,
}),
I::Bne(F::S {
rs1: A2,
rs2: ZERO,
imm12: -24,
}),
I::Jalr(F::I {
rd: ZERO,
rs1: RA,
imm12: 0,
}),
]);
for machine_state in core.run() {
println!("{:?}", machine_state);
}
}
依赖关系
~2.5MB
~56K SLoC