#[cfg(feature = "cranelift-jit")]
use cranelift_codegen::ir::{AbiParam, Block, BlockArg, InstBuilder, Signature, types};
#[cfg(feature = "cranelift-jit")]
use cranelift_frontend::FunctionBuilder;
#[cfg(feature = "cranelift-jit")]
pub(crate) fn jump_with_status(
b: &mut FunctionBuilder,
block: Block,
status: cranelift_codegen::ir::Value,
) {
b.ins().jump(block, &[BlockArg::Value(status)]);
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn helper_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(types::I64));
sig.params.push(AbiParam::new(types::I64));
sig.params.push(AbiParam::new(types::I64));
sig.params.push(AbiParam::new(types::I64));
sig.returns.push(AbiParam::new(types::I32));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn alloc_buffer_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.returns.push(AbiParam::new(pointer_type));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn free_buffer_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn pack_shared_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.returns.push(AbiParam::new(pointer_type));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn copy_bytes_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn clone_value_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.returns.push(AbiParam::new(types::I32));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn collection_predicate_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.returns.push(AbiParam::new(types::I32));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn collection_get_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.returns.push(AbiParam::new(types::I32));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn value_slot_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.returns.push(AbiParam::new(types::I32));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn value_eq_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.returns.push(AbiParam::new(types::I32));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn box_heap_value_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(types::I64));
sig.returns.push(AbiParam::new(types::I32));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn restore_exit_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.params.push(AbiParam::new(pointer_type));
sig.returns.push(AbiParam::new(types::I32));
sig
}
#[cfg(feature = "cranelift-jit")]
pub(crate) fn entry_signature(
pointer_type: cranelift_codegen::ir::Type,
call_conv: cranelift_codegen::isa::CallConv,
) -> Signature {
let mut sig = Signature::new(call_conv);
sig.params.push(AbiParam::new(pointer_type));
sig.returns.push(AbiParam::new(types::I32));
sig
}