wave-decode 0.1.2

WAVE decoder - shared instruction decoder for WAVE ISA
Documentation

wave-decode

Shared instruction decoder for the WAVE ISA. This crate provides:

  • Opcode definitions matching wave-asm's encoding
  • Instruction decoding from binary to structured Rust types
  • WBIN container parsing for reading .wbin files

Usage

Add to your Cargo.toml:

[dependencies]
wave-decode = { path = "../wave-decode" }

Decoding Instructions

use wave_decode::{Decoder, decode_all};

// Decode from raw bytes
let code: &[u8] = &[0x01, 0x01, 0x00, 0xFC]; // halt instruction
let mut decoder = Decoder::new(code);

while decoder.has_more() {
    let instruction = decoder.decode_next()?;
    println!("{}: {}", instruction.offset, instruction.mnemonic());
}

// Or decode all at once
let instructions = decode_all(code)?;

Reading WBIN Files

use wave_decode::WbinFile;

let data = std::fs::read("kernel.wbin")?;
let wbin = WbinFile::parse(&data)?;

println!("Kernels: {}", wbin.kernel_count());
for kernel in &wbin.kernels {
    println!("  {} - {} registers, workgroup [{}, {}, {}]",
        kernel.name,
        kernel.register_count,
        kernel.workgroup_size[0],
        kernel.workgroup_size[1],
        kernel.workgroup_size[2],
    );
}

// Decode a specific kernel
if let Some(code) = wbin.kernel_code(0) {
    let instructions = wave_decode::decode_all(code)?;
    // ...
}

Architecture

The crate is organized into four modules:

  • opcodes - Constants and enums for all WAVE opcodes and modifiers
  • instruction - DecodedInstruction and Operation types
  • decoder - The Decoder struct that reads binary instructions
  • wbin - WBIN container format parser

WBIN Format

The WBIN format is a simple container:

Offset Size Description
0x00 4 Magic "WAVE"
0x04 2 Version (0x0001)
0x06 2 Flags (reserved)
0x08 4 Code section offset
0x0C 4 Code section size
0x10 4 Symbol table offset
0x14 4 Symbol table size
0x18 4 Metadata offset
0x1C 4 Metadata size

Followed by the code section, symbol table (null-terminated strings), and kernel metadata.

License

Apache 2.0 - see LICENSE