use lightning_sys::{Jit, JitWord, JitPointer, Reg};
use std::ffi::CString;
use std::convert::TryInto;
const JIT_R1: Reg = Reg::R(1);
#[allow(clippy::print_literal)]
#[allow(non_snake_case)]
fn main() {
let mut j = Jit::new();
let mut js = j.new_state();
let cs = CString::new("generated %d bytes\n").unwrap();
let start = js.note(Some(file!()), line!());
js.prolog();
let inp = js.arg();
js.getarg(JIT_R1, &inp);
js.prepare();
js.pushargi(cs.as_ptr() as JitWord);
js.ellipsis();
js.pushargr(JIT_R1);
js.finishi(libc::printf as JitPointer);
js.ret();
js.epilog();
let end = js.note(Some(file!()), line!());
let myFunction = unsafe{ js.emit::<extern fn(JitWord)>() };
myFunction((js.address(&end) as usize - js.address(&start) as usize).try_into().unwrap());
js.clear();
}