13 releases (6 stable)

1.3.1 Dec 27, 2024
1.2.0 Oct 14, 2024
1.0.1 Sep 28, 2024
1.0.0-beta.3 Aug 16, 2024
0.1.3 Oct 17, 2023

#276 in Encoding

Download history 206/week @ 2024-10-06 381/week @ 2024-10-13 78/week @ 2024-10-20 422/week @ 2024-10-27 93/week @ 2024-11-03 121/week @ 2024-11-10 81/week @ 2024-11-17 66/week @ 2024-11-24 90/week @ 2024-12-01 218/week @ 2024-12-08 320/week @ 2024-12-15 714/week @ 2024-12-22 334/week @ 2024-12-29 448/week @ 2025-01-05 354/week @ 2025-01-12 321/week @ 2025-01-19

1,549 downloads per month
Used in 2 crates

MIT license

140KB
3.5K SLoC

raki

Rust
RISC-V instruction decoder written in Rust.

  • Both 32/64bit support.
  • Support rv32/64imac, Zicsr, Zifencei extensions.
  • Implement Display trait for formatting.

Usage

Call the decode as u16/u32 method.

use raki::{BaseIOpcode, Decode, Instruction, Isa, OpcodeKind};

fn main() {
    let inst_bytes: u32 = 0b1110_1110_1100_0010_1000_0010_1001_0011;
    let inst: Instruction = match inst_bytes.decode(Isa::Rv32) {
        Ok(inst) => inst,
        Err(e) => panic!("decoding failed due to {e:?}"),
    };

    assert_eq!(inst.opc, OpcodeKind::BaseI(BaseIOpcode::ADDI));
    println!("{inst}");
}
// --output--
// addi t0, t0, -276

Support

  • BaseI (RV32I, RV64I)
  • M
  • A
  • D
  • Q
  • C
  • B
  • P
  • V
  • H
  • Zicsr
  • Zifencei
  • Zicntr
  • Zicfiss
  • Priv (Now only supports mret, sret, wfi, sfence.vma)

License

This crate is licensed under MIT.
See LICENSE for details.

Contribution

All contributions are welcome, including issues, pull requests, questions, etc... See CONTRIBUTING.md for details.

No runtime deps