macro_rules! jit_call {
($func_ptr:expr, $args:expr, $ret:ty, []) => {{
let f: extern "C" fn() -> $ret = std::mem::transmute($func_ptr);
f()
}};
($func_ptr:expr, $args:expr, $ret:ty, [$($idx:tt),+]) => {{
let f: extern "C" fn($(jit_call!(@ty $idx)),+) -> $ret = std::mem::transmute($func_ptr);
f($($args[$idx]),+)
}};
(@ty $idx:tt) => { f32 };
}
macro_rules! jit_call_outptr {
($func_ptr:expr, $args:expr, $out_ptr:expr, []) => {{
let f: extern "C" fn(*mut f32) = std::mem::transmute($func_ptr);
f($out_ptr)
}};
($func_ptr:expr, $args:expr, $out_ptr:expr, [$($idx:tt),+]) => {{
let f: extern "C" fn($(jit_call_outptr!(@ty $idx),)+ *mut f32) = std::mem::transmute($func_ptr);
f($($args[$idx],)+ $out_ptr)
}};
(@ty $idx:tt) => { f32 };
}
mod compiled;
mod error;
mod jit;
mod types;
pub use compiled::{CompiledQuatFn, CompiledQuaternionFn, CompiledVec3Fn};
pub use error::CraneliftError;
pub use jit::QuaternionJit;
pub use types::{TypedValue, VarSpec};