Macro uasm

Source
macro_rules! uasm {
    ($( $tt:tt )+) => { ... };
}
Expand description

Macro compiler for AluVM assembler.

ยงExample

#![cfg_attr(coverage_nightly, feature(coverage_attribute), coverage(off))]
use ultrasonic::{uasm, Instr, StateValue, VmContext};
use zkaluvm::alu::regs::Status;
use zkaluvm::alu::{Lib, LibId, LibSite, Vm};

let code = uasm! {
    nop;
    chk     CK;
    test    E1;
    cknxi   destructible;
    not     CO;
    jif     CO, +2;
    mov     CO, CK;
    chk     CO;
    ldi     immutable;
    clr     EA;
    put     E2, 0;
    put     EB, 20;
    mov     E1, E2;
    eq      E1, E2;
    neg     EA, EH;
    add     EA, EH;
    mul     EA, EH;
};

let lib = Lib::assemble::<Instr<LibId>>(&code).unwrap();
let mut vm = Vm::<Instr<LibId>>::new();
let ctx = VmContext {
    witness: StateValue::None,
    destructible_input: &[],
    immutable_input: &[],
    destructible_output: &[],
    immutable_output: &[],
};
match vm.exec(LibSite::new(lib.lib_id(), 0), &ctx, |_| Some(&lib)) {
    Status::Ok => println!("success"),
    Status::Fail => println!("failure"),
}