2个版本

0.1.1 2021年8月8日
0.1.0 2021年8月8日

模拟器中排名第340

MIT许可证

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