#[macro_export]
macro_rules! jit_signature {
($module:expr; fn($($pty:ty),* $(,)?) $(-> $ret:ty)?) => {{
let __m = $module;
let mut __sig = $crate::__reexport::cranelift_module::Module::make_signature(__m);
let __ptr = $crate::__reexport::cranelift_module::Module::target_config(__m).pointer_type();
$(
<$pty as $crate::JitParam>::push_params(&mut __sig.params, __ptr);
)*
$(
<$ret as $crate::JitParam>::push_params(&mut __sig.returns, __ptr);
)?
__sig
}};
}
#[macro_export]
macro_rules! define_jit_fn {
(
$module:expr,
$name:expr,
$linkage:expr,
fn($($pty:ty),* $(,)?) $(-> $ret:ty)?,
$body:expr $(,)?
) => {{
let __module: &mut _ = $module;
let __sig = $crate::jit_signature!(&*__module; fn($($pty),*) $(-> $ret)?);
$crate::define_function(__module, $name, $linkage, __sig, $body)
}};
}
#[macro_export]
macro_rules! jit_call {
($bcx:expr, $ptr_ty:expr, $callee:expr $(; $($arg:expr),* $(,)?)?) => {{
let __bcx = &mut *$bcx;
let __ptr_ty = $ptr_ty;
let mut __args: $crate::__reexport::smallvec::SmallVec<
[$crate::__reexport::cranelift_codegen::ir::Value; 8]
> = $crate::__reexport::smallvec::SmallVec::new();
$($(
<_ as $crate::JitArg>::lower($arg, __bcx, __ptr_ty, &mut __args);
)*)?
__bcx.ins().call($callee, &__args)
}};
}