2个版本
0.1.1 | 2021年8月8日 |
---|---|
0.1.0 | 2021年8月8日 |
在模拟器中排名第340
70KB
2K SLoC
RISC-V指令编码和解码。
此crate允许您将RISC-V指令流编码和解码到Rust结构体中。
要从ELF二进制文件中获取指令流,您通常可以在其中找到它们,我推荐使用goblin
crate。
示例
use riscy_isa::{Opcode, DecodingStream, Instruction, Register, OpImmFunction};
let bytes: [u8; 4] = [19, 5, 0, 0];
let mut stream = DecodingStream::new(&bytes);
// Decodes to an `addi a0, x0, 0` instruction
assert_eq!(stream.next(), Some(Instruction::I {
opcode: Opcode::OpImm(OpImmFunction::ADDI),
rd: Register::A0,
rs1: Register::Zero,
imm: 0,
}));
// There's only one instruction in the byte array so any further calls to
// `next` return `None`.
assert_eq!(stream.next(), None);
兼容性
此crate部分或全部支持以下RISC-V扩展
- RV64I基本指令集。
- "M" 整数乘除(例外:
MULHSU
未实现) - "A" 原子操作(例外:加载保留和存储条件未实现)
- "Zicsr" 控制和状态寄存器(部分)
- "C" 压缩指令(例外:指令编码未实现)
依赖
~120KB