use cranelift::prelude::*;
use cranelift_jit::JITBuilder;
use cranelift_jit::JITModule;
use cranelift_module::{FuncId, Linkage, Module};
use std::collections::HashMap;
use super::super::ffi::conversion::{
jit_print_atomic, jit_print_bool, jit_print_channel, jit_print_char,
jit_print_deque, jit_print_f64, jit_print_hashmap, jit_print_hashset,
jit_print_i64, jit_print_iterator, jit_print_lazy, jit_print_mutex,
jit_print_option, jit_print_priority_queue, jit_print_range,
jit_print_result, jit_print_str, jit_print_typed_array,
jit_print_typed_object, jit_print_u64, jit_string_concat, jit_to_number,
jit_to_string, jit_type_check, jit_typeof,
};
#[allow(deprecated)]
use super::super::ffi::object::{
jit_alloc_owned_mut_cell, jit_alloc_owned_mut_cell_bool, jit_alloc_owned_mut_cell_f64,
jit_alloc_owned_mut_cell_i8, jit_alloc_owned_mut_cell_i16, jit_alloc_owned_mut_cell_i32,
jit_alloc_owned_mut_cell_i64, jit_alloc_owned_mut_cell_ptr, jit_alloc_owned_mut_cell_u8,
jit_alloc_owned_mut_cell_u16, jit_alloc_owned_mut_cell_u32, jit_alloc_owned_mut_cell_u64,
jit_alloc_shared_cell, jit_arc_shared_release, jit_arc_shared_retain,
jit_finalize_heap_closure, jit_format, jit_get_prop, jit_hashmap_shape_id,
jit_hashmap_value_at, jit_length, jit_make_closure, jit_new_object, jit_object_rest,
jit_read_owned_mut_cell_bool, jit_read_owned_mut_cell_f64, jit_read_owned_mut_cell_i8,
jit_read_owned_mut_cell_i16, jit_read_owned_mut_cell_i32, jit_read_owned_mut_cell_i64,
jit_read_owned_mut_cell_ptr, jit_read_owned_mut_cell_u8, jit_read_owned_mut_cell_u16,
jit_read_owned_mut_cell_u32, jit_read_owned_mut_cell_u64, jit_read_shared_cell_bool,
jit_read_shared_cell_f64, jit_read_shared_cell_i8, jit_read_shared_cell_i16,
jit_read_shared_cell_i32, jit_read_shared_cell_i64, jit_read_shared_cell_ptr,
jit_read_shared_cell_u8, jit_read_shared_cell_u16, jit_read_shared_cell_u32,
jit_read_shared_cell_u64, jit_set_prop, jit_shared_lock_contended,
jit_shared_unlock_contended, jit_write_owned_mut_cell_bool, jit_write_owned_mut_cell_f64,
jit_write_owned_mut_cell_i8, jit_write_owned_mut_cell_i16, jit_write_owned_mut_cell_i32,
jit_write_owned_mut_cell_i64, jit_write_owned_mut_cell_ptr, jit_write_owned_mut_cell_u8,
jit_write_owned_mut_cell_u16, jit_write_owned_mut_cell_u32, jit_write_owned_mut_cell_u64,
jit_write_shared_cell_bool, jit_write_shared_cell_f64, jit_write_shared_cell_i8,
jit_write_shared_cell_i16, jit_write_shared_cell_i32, jit_write_shared_cell_i64,
jit_write_shared_cell_ptr, jit_write_shared_cell_u8, jit_write_shared_cell_u16,
jit_write_shared_cell_u32, jit_write_shared_cell_u64,
};
use super::super::ffi::typed_object::{jit_typed_merge_object, jit_typed_object_alloc};
use super::helpers::jit_format_error;
#[allow(deprecated)]
pub fn register_object_symbols(builder: &mut JITBuilder) {
builder.symbol("jit_new_object", jit_new_object as *const u8);
builder.symbol("jit_get_prop", jit_get_prop as *const u8);
builder.symbol("jit_set_prop", jit_set_prop as *const u8);
builder.symbol("jit_length", jit_length as *const u8);
builder.symbol("jit_typeof", jit_typeof as *const u8);
builder.symbol("jit_type_check", jit_type_check as *const u8);
builder.symbol("jit_to_string", jit_to_string as *const u8);
builder.symbol("jit_to_number", jit_to_number as *const u8);
builder.symbol("jit_string_concat", jit_string_concat as *const u8);
builder.symbol(
"jit_make_ok",
super::super::ffi::result::jit_make_ok as *const u8,
);
builder.symbol(
"jit_make_err",
super::super::ffi::result::jit_make_err as *const u8,
);
builder.symbol(
"jit_make_some",
super::super::ffi::result::jit_make_some as *const u8,
);
builder.symbol(
"jit_v2_make_result_ok",
super::super::ffi::result::jit_v2_make_result_ok as *const u8,
);
builder.symbol(
"jit_v2_make_result_err",
super::super::ffi::result::jit_v2_make_result_err as *const u8,
);
builder.symbol(
"jit_v2_make_option_some",
super::super::ffi::result::jit_v2_make_option_some as *const u8,
);
builder.symbol(
"jit_v2_make_option_none",
super::super::ffi::result::jit_v2_make_option_none as *const u8,
);
builder.symbol(
"jit_arc_result_is_ok",
super::super::ffi::result::jit_arc_result_is_ok as *const u8,
);
builder.symbol(
"jit_arc_result_is_err",
super::super::ffi::result::jit_arc_result_is_err as *const u8,
);
builder.symbol(
"jit_arc_result_payload",
super::super::ffi::result::jit_arc_result_payload as *const u8,
);
builder.symbol(
"jit_arc_option_is_some",
super::super::ffi::result::jit_arc_option_is_some as *const u8,
);
builder.symbol(
"jit_arc_option_is_none",
super::super::ffi::result::jit_arc_option_is_none as *const u8,
);
builder.symbol(
"jit_arc_option_payload",
super::super::ffi::result::jit_arc_option_payload as *const u8,
);
builder.symbol(
"jit_arc_result_retain",
super::super::ffi::result::jit_arc_result_retain as *const u8,
);
builder.symbol(
"jit_arc_result_release",
super::super::ffi::result::jit_arc_result_release as *const u8,
);
builder.symbol(
"jit_arc_option_retain",
super::super::ffi::result::jit_arc_option_retain as *const u8,
);
builder.symbol(
"jit_arc_option_release",
super::super::ffi::result::jit_arc_option_release as *const u8,
);
builder.symbol("jit_print_i64", jit_print_i64 as *const u8);
builder.symbol("jit_print_u64", jit_print_u64 as *const u8);
builder.symbol("jit_print_f64", jit_print_f64 as *const u8);
builder.symbol("jit_print_bool", jit_print_bool as *const u8);
builder.symbol("jit_print_str", jit_print_str as *const u8);
builder.symbol(
"jit_print_typed_object",
jit_print_typed_object as *const u8,
);
builder.symbol("jit_print_option", jit_print_option as *const u8);
builder.symbol("jit_print_result", jit_print_result as *const u8);
builder.symbol("jit_print_char", jit_print_char as *const u8);
builder.symbol("jit_print_mutex", jit_print_mutex as *const u8);
builder.symbol("jit_print_atomic", jit_print_atomic as *const u8);
builder.symbol("jit_print_lazy", jit_print_lazy as *const u8);
builder.symbol("jit_print_channel", jit_print_channel as *const u8);
builder.symbol("jit_print_hashmap", jit_print_hashmap as *const u8);
builder.symbol("jit_print_hashset", jit_print_hashset as *const u8);
builder.symbol("jit_print_deque", jit_print_deque as *const u8);
builder.symbol(
"jit_print_priority_queue",
jit_print_priority_queue as *const u8,
);
builder.symbol("jit_print_range", jit_print_range as *const u8);
builder.symbol("jit_print_iterator", jit_print_iterator as *const u8);
builder.symbol(
"jit_print_typed_array",
jit_print_typed_array as *const u8,
);
builder.symbol("jit_make_closure", jit_make_closure as *const u8);
builder.symbol(
"jit_finalize_heap_closure",
jit_finalize_heap_closure as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell",
jit_alloc_owned_mut_cell as *const u8,
);
builder.symbol(
"jit_arc_shared_retain",
jit_arc_shared_retain as *const u8,
);
builder.symbol(
"jit_shared_lock_contended",
jit_shared_lock_contended as *const u8,
);
builder.symbol(
"jit_shared_unlock_contended",
jit_shared_unlock_contended as *const u8,
);
builder.symbol(
"jit_alloc_shared_cell",
jit_alloc_shared_cell as *const u8,
);
builder.symbol(
"jit_arc_shared_release",
jit_arc_shared_release as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_i64",
jit_alloc_owned_mut_cell_i64 as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_u64",
jit_alloc_owned_mut_cell_u64 as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_f64",
jit_alloc_owned_mut_cell_f64 as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_i32",
jit_alloc_owned_mut_cell_i32 as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_u32",
jit_alloc_owned_mut_cell_u32 as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_i16",
jit_alloc_owned_mut_cell_i16 as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_u16",
jit_alloc_owned_mut_cell_u16 as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_i8",
jit_alloc_owned_mut_cell_i8 as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_u8",
jit_alloc_owned_mut_cell_u8 as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_bool",
jit_alloc_owned_mut_cell_bool as *const u8,
);
builder.symbol(
"jit_alloc_owned_mut_cell_ptr",
jit_alloc_owned_mut_cell_ptr as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_i64",
jit_read_owned_mut_cell_i64 as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_u64",
jit_read_owned_mut_cell_u64 as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_f64",
jit_read_owned_mut_cell_f64 as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_i32",
jit_read_owned_mut_cell_i32 as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_u32",
jit_read_owned_mut_cell_u32 as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_i16",
jit_read_owned_mut_cell_i16 as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_u16",
jit_read_owned_mut_cell_u16 as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_i8",
jit_read_owned_mut_cell_i8 as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_u8",
jit_read_owned_mut_cell_u8 as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_bool",
jit_read_owned_mut_cell_bool as *const u8,
);
builder.symbol(
"jit_read_owned_mut_cell_ptr",
jit_read_owned_mut_cell_ptr as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_i64",
jit_write_owned_mut_cell_i64 as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_u64",
jit_write_owned_mut_cell_u64 as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_f64",
jit_write_owned_mut_cell_f64 as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_i32",
jit_write_owned_mut_cell_i32 as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_u32",
jit_write_owned_mut_cell_u32 as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_i16",
jit_write_owned_mut_cell_i16 as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_u16",
jit_write_owned_mut_cell_u16 as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_i8",
jit_write_owned_mut_cell_i8 as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_u8",
jit_write_owned_mut_cell_u8 as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_bool",
jit_write_owned_mut_cell_bool as *const u8,
);
builder.symbol(
"jit_write_owned_mut_cell_ptr",
jit_write_owned_mut_cell_ptr as *const u8,
);
builder.symbol(
"jit_read_shared_cell_i64",
jit_read_shared_cell_i64 as *const u8,
);
builder.symbol(
"jit_read_shared_cell_u64",
jit_read_shared_cell_u64 as *const u8,
);
builder.symbol(
"jit_read_shared_cell_f64",
jit_read_shared_cell_f64 as *const u8,
);
builder.symbol(
"jit_read_shared_cell_i32",
jit_read_shared_cell_i32 as *const u8,
);
builder.symbol(
"jit_read_shared_cell_u32",
jit_read_shared_cell_u32 as *const u8,
);
builder.symbol(
"jit_read_shared_cell_i16",
jit_read_shared_cell_i16 as *const u8,
);
builder.symbol(
"jit_read_shared_cell_u16",
jit_read_shared_cell_u16 as *const u8,
);
builder.symbol(
"jit_read_shared_cell_i8",
jit_read_shared_cell_i8 as *const u8,
);
builder.symbol(
"jit_read_shared_cell_u8",
jit_read_shared_cell_u8 as *const u8,
);
builder.symbol(
"jit_read_shared_cell_bool",
jit_read_shared_cell_bool as *const u8,
);
builder.symbol(
"jit_read_shared_cell_ptr",
jit_read_shared_cell_ptr as *const u8,
);
builder.symbol(
"jit_write_shared_cell_i64",
jit_write_shared_cell_i64 as *const u8,
);
builder.symbol(
"jit_write_shared_cell_u64",
jit_write_shared_cell_u64 as *const u8,
);
builder.symbol(
"jit_write_shared_cell_f64",
jit_write_shared_cell_f64 as *const u8,
);
builder.symbol(
"jit_write_shared_cell_i32",
jit_write_shared_cell_i32 as *const u8,
);
builder.symbol(
"jit_write_shared_cell_u32",
jit_write_shared_cell_u32 as *const u8,
);
builder.symbol(
"jit_write_shared_cell_i16",
jit_write_shared_cell_i16 as *const u8,
);
builder.symbol(
"jit_write_shared_cell_u16",
jit_write_shared_cell_u16 as *const u8,
);
builder.symbol(
"jit_write_shared_cell_i8",
jit_write_shared_cell_i8 as *const u8,
);
builder.symbol(
"jit_write_shared_cell_u8",
jit_write_shared_cell_u8 as *const u8,
);
builder.symbol(
"jit_write_shared_cell_bool",
jit_write_shared_cell_bool as *const u8,
);
builder.symbol(
"jit_write_shared_cell_ptr",
jit_write_shared_cell_ptr as *const u8,
);
builder.symbol("jit_object_rest", jit_object_rest as *const u8);
builder.symbol("jit_format", jit_format as *const u8);
builder.symbol("jit_format_error", jit_format_error as *const u8);
builder.symbol(
"jit_typed_object_alloc",
jit_typed_object_alloc as *const u8,
);
builder.symbol(
"jit_typed_merge_object",
jit_typed_merge_object as *const u8,
);
builder.symbol(
"jit_typed_object_get_field",
super::super::ffi::typed_object::jit_typed_object_get_field as *const u8,
);
builder.symbol(
"jit_typed_object_set_field",
super::super::ffi::typed_object::jit_typed_object_set_field as *const u8,
);
builder.symbol("jit_hashmap_shape_id", jit_hashmap_shape_id as *const u8);
builder.symbol("jit_hashmap_value_at", jit_hashmap_value_at as *const u8);
}
pub fn declare_object_functions(module: &mut JITModule, ffi_funcs: &mut HashMap<String, FuncId>) {
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_new_object", Linkage::Import, &sig)
.expect("Failed to declare jit_new_object");
ffi_funcs.insert("jit_new_object".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_get_prop", Linkage::Import, &sig)
.expect("Failed to declare jit_get_prop");
ffi_funcs.insert("jit_get_prop".to_string(), func_id);
}
{
let mut sig = module.make_signature();
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::I64)); let func_id = module
.declare_function("jit_set_prop", Linkage::Import, &sig)
.expect("Failed to declare jit_set_prop");
ffi_funcs.insert("jit_set_prop".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_length", Linkage::Import, &sig)
.expect("Failed to declare jit_length");
ffi_funcs.insert("jit_length".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_typeof", Linkage::Import, &sig)
.expect("Failed to declare jit_typeof");
ffi_funcs.insert("jit_typeof".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_type_check", Linkage::Import, &sig)
.expect("Failed to declare jit_type_check");
ffi_funcs.insert("jit_type_check".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64));
sig.returns.push(AbiParam::new(types::I64));
let func_id = module
.declare_function("jit_to_string", Linkage::Import, &sig)
.expect("Failed to declare jit_to_string");
ffi_funcs.insert("jit_to_string".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64));
sig.returns.push(AbiParam::new(types::I64));
let func_id = module
.declare_function("jit_to_number", Linkage::Import, &sig)
.expect("Failed to declare jit_to_number");
ffi_funcs.insert("jit_to_number".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64));
sig.params.push(AbiParam::new(types::I8));
sig.params.push(AbiParam::new(types::I64));
sig.params.push(AbiParam::new(types::I8));
sig.returns.push(AbiParam::new(types::I64));
let func_id = module
.declare_function("jit_string_concat", Linkage::Import, &sig)
.expect("Failed to declare jit_string_concat");
ffi_funcs.insert("jit_string_concat".to_string(), func_id);
}
for name in ["jit_make_ok", "jit_make_err", "jit_make_some"] {
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64));
let func_id = module
.declare_function(name, Linkage::Import, &sig)
.unwrap_or_else(|e| panic!("Failed to declare {}: {:?}", name, e));
ffi_funcs.insert(name.to_string(), func_id);
}
for name in [
"jit_v2_make_result_ok",
"jit_v2_make_result_err",
"jit_v2_make_option_some",
] {
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I8)); sig.returns.push(AbiParam::new(types::I64));
let func_id = module
.declare_function(name, Linkage::Import, &sig)
.unwrap_or_else(|e| panic!("Failed to declare {}: {:?}", name, e));
ffi_funcs.insert(name.to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.returns.push(AbiParam::new(types::I64));
let func_id = module
.declare_function("jit_v2_make_option_none", Linkage::Import, &sig)
.expect("Failed to declare jit_v2_make_option_none");
ffi_funcs.insert("jit_v2_make_option_none".to_string(), func_id);
}
for name in [
"jit_arc_result_is_ok",
"jit_arc_result_is_err",
"jit_arc_option_is_some",
"jit_arc_option_is_none",
] {
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64));
sig.returns.push(AbiParam::new(types::I8));
let func_id = module
.declare_function(name, Linkage::Import, &sig)
.unwrap_or_else(|e| panic!("Failed to declare {}: {:?}", name, e));
ffi_funcs.insert(name.to_string(), func_id);
}
for name in ["jit_arc_result_payload", "jit_arc_option_payload"] {
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64));
sig.returns.push(AbiParam::new(types::I64));
let func_id = module
.declare_function(name, Linkage::Import, &sig)
.unwrap_or_else(|e| panic!("Failed to declare {}: {:?}", name, e));
ffi_funcs.insert(name.to_string(), func_id);
}
for name in [
"jit_arc_result_retain",
"jit_arc_result_release",
"jit_arc_option_retain",
"jit_arc_option_release",
] {
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64));
let func_id = module
.declare_function(name, Linkage::Import, &sig)
.unwrap_or_else(|e| panic!("Failed to declare {}: {:?}", name, e));
ffi_funcs.insert(name.to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64));
let func_id = module
.declare_function("jit_print_i64", Linkage::Import, &sig)
.expect("Failed to declare jit_print_i64");
ffi_funcs.insert("jit_print_i64".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64));
let func_id = module
.declare_function("jit_print_u64", Linkage::Import, &sig)
.expect("Failed to declare jit_print_u64");
ffi_funcs.insert("jit_print_u64".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::F64));
let func_id = module
.declare_function("jit_print_f64", Linkage::Import, &sig)
.expect("Failed to declare jit_print_f64");
ffi_funcs.insert("jit_print_f64".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I8));
let func_id = module
.declare_function("jit_print_bool", Linkage::Import, &sig)
.expect("Failed to declare jit_print_bool");
ffi_funcs.insert("jit_print_bool".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_str", Linkage::Import, &sig)
.expect("Failed to declare jit_print_str");
ffi_funcs.insert("jit_print_str".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_typed_object", Linkage::Import, &sig)
.expect("Failed to declare jit_print_typed_object");
ffi_funcs.insert("jit_print_typed_object".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_option", Linkage::Import, &sig)
.expect("Failed to declare jit_print_option");
ffi_funcs.insert("jit_print_option".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_result", Linkage::Import, &sig)
.expect("Failed to declare jit_print_result");
ffi_funcs.insert("jit_print_result".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I32)); let func_id = module
.declare_function("jit_print_char", Linkage::Import, &sig)
.expect("Failed to declare jit_print_char");
ffi_funcs.insert("jit_print_char".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_mutex", Linkage::Import, &sig)
.expect("Failed to declare jit_print_mutex");
ffi_funcs.insert("jit_print_mutex".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_atomic", Linkage::Import, &sig)
.expect("Failed to declare jit_print_atomic");
ffi_funcs.insert("jit_print_atomic".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_lazy", Linkage::Import, &sig)
.expect("Failed to declare jit_print_lazy");
ffi_funcs.insert("jit_print_lazy".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_channel", Linkage::Import, &sig)
.expect("Failed to declare jit_print_channel");
ffi_funcs.insert("jit_print_channel".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_hashmap", Linkage::Import, &sig)
.expect("Failed to declare jit_print_hashmap");
ffi_funcs.insert("jit_print_hashmap".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_hashset", Linkage::Import, &sig)
.expect("Failed to declare jit_print_hashset");
ffi_funcs.insert("jit_print_hashset".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_deque", Linkage::Import, &sig)
.expect("Failed to declare jit_print_deque");
ffi_funcs.insert("jit_print_deque".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_priority_queue", Linkage::Import, &sig)
.expect("Failed to declare jit_print_priority_queue");
ffi_funcs.insert("jit_print_priority_queue".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_range", Linkage::Import, &sig)
.expect("Failed to declare jit_print_range");
ffi_funcs.insert("jit_print_range".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_iterator", Linkage::Import, &sig)
.expect("Failed to declare jit_print_iterator");
ffi_funcs.insert("jit_print_iterator".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_print_typed_array", Linkage::Import, &sig)
.expect("Failed to declare jit_print_typed_array");
ffi_funcs.insert("jit_print_typed_array".to_string(), func_id);
}
{
let mut sig = module.make_signature();
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::I64));
let func_id = module
.declare_function("jit_make_closure", Linkage::Import, &sig)
.expect("Failed to declare jit_make_closure");
ffi_funcs.insert("jit_make_closure".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I32)); sig.params.push(AbiParam::new(types::I32)); sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64));
let func_id = module
.declare_function("jit_finalize_heap_closure", Linkage::Import, &sig)
.expect("Failed to declare jit_finalize_heap_closure");
ffi_funcs.insert("jit_finalize_heap_closure".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_alloc_owned_mut_cell", Linkage::Import, &sig)
.expect("Failed to declare jit_alloc_owned_mut_cell");
ffi_funcs.insert("jit_alloc_owned_mut_cell".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_arc_shared_retain", Linkage::Import, &sig)
.expect("Failed to declare jit_arc_shared_retain");
ffi_funcs.insert("jit_arc_shared_retain".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_shared_lock_contended", Linkage::Import, &sig)
.expect("Failed to declare jit_shared_lock_contended");
ffi_funcs.insert("jit_shared_lock_contended".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_shared_unlock_contended", Linkage::Import, &sig)
.expect("Failed to declare jit_shared_unlock_contended");
ffi_funcs.insert("jit_shared_unlock_contended".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_alloc_shared_cell", Linkage::Import, &sig)
.expect("Failed to declare jit_alloc_shared_cell");
ffi_funcs.insert("jit_alloc_shared_cell".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_arc_shared_release", Linkage::Import, &sig)
.expect("Failed to declare jit_arc_shared_release");
ffi_funcs.insert("jit_arc_shared_release".to_string(), func_id);
}
fn declare_owned_alloc(
module: &mut JITModule,
ffi_funcs: &mut HashMap<String, FuncId>,
name: &'static str,
param: types::Type,
) {
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(param)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function(name, Linkage::Import, &sig)
.unwrap_or_else(|_| panic!("Failed to declare {}", name));
ffi_funcs.insert(name.to_string(), func_id);
}
fn declare_cell_read(
module: &mut JITModule,
ffi_funcs: &mut HashMap<String, FuncId>,
name: &'static str,
ret: types::Type,
) {
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(ret)); let func_id = module
.declare_function(name, Linkage::Import, &sig)
.unwrap_or_else(|_| panic!("Failed to declare {}", name));
ffi_funcs.insert(name.to_string(), func_id);
}
fn declare_cell_write(
module: &mut JITModule,
ffi_funcs: &mut HashMap<String, FuncId>,
name: &'static str,
param: types::Type,
) {
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(param)); let func_id = module
.declare_function(name, Linkage::Import, &sig)
.unwrap_or_else(|_| panic!("Failed to declare {}", name));
ffi_funcs.insert(name.to_string(), func_id);
}
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_i64", types::I64);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_u64", types::I64);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_f64", types::F64);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_i32", types::I32);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_u32", types::I32);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_i16", types::I32);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_u16", types::I32);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_i8", types::I32);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_u8", types::I32);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_bool", types::I32);
declare_owned_alloc(module, ffi_funcs, "jit_alloc_owned_mut_cell_ptr", types::I64);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_i64", types::I64);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_u64", types::I64);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_f64", types::F64);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_i32", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_u32", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_i16", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_u16", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_i8", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_u8", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_bool", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_owned_mut_cell_ptr", types::I64);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_i64", types::I64);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_u64", types::I64);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_f64", types::F64);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_i32", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_u32", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_i16", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_u16", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_i8", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_u8", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_bool", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_owned_mut_cell_ptr", types::I64);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_i64", types::I64);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_u64", types::I64);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_f64", types::F64);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_i32", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_u32", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_i16", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_u16", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_i8", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_u8", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_bool", types::I32);
declare_cell_read(module, ffi_funcs, "jit_read_shared_cell_ptr", types::I64);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_i64", types::I64);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_u64", types::I64);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_f64", types::F64);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_i32", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_u32", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_i16", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_u16", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_i8", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_u8", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_bool", types::I32);
declare_cell_write(module, ffi_funcs, "jit_write_shared_cell_ptr", types::I64);
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_object_rest", Linkage::Import, &sig)
.expect("Failed to declare jit_object_rest");
ffi_funcs.insert("jit_object_rest".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_format", Linkage::Import, &sig)
.expect("Failed to declare jit_format");
ffi_funcs.insert("jit_format".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_format_error", Linkage::Import, &sig)
.expect("Failed to declare jit_format_error");
ffi_funcs.insert("jit_format_error".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I32)); sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_typed_object_alloc", Linkage::Import, &sig)
.expect("Failed to declare jit_typed_object_alloc");
ffi_funcs.insert("jit_typed_object_alloc".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64));
sig.params.push(AbiParam::new(types::I64));
sig.returns.push(AbiParam::new(types::I64));
let func_id = module
.declare_function("jit_typed_object_get_field", Linkage::Import, &sig)
.expect("Failed to declare jit_typed_object_get_field");
ffi_funcs.insert("jit_typed_object_get_field".to_string(), func_id);
}
{
let mut sig = module.make_signature();
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::I64)); let func_id = module
.declare_function("jit_typed_object_set_field", Linkage::Import, &sig)
.expect("Failed to declare jit_typed_object_set_field");
ffi_funcs.insert("jit_typed_object_set_field".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I32)); 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::I64)); let func_id = module
.declare_function("jit_typed_merge_object", Linkage::Import, &sig)
.expect("Failed to declare jit_typed_merge_object");
ffi_funcs.insert("jit_typed_merge_object".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I32)); let func_id = module
.declare_function("jit_hashmap_shape_id", Linkage::Import, &sig)
.expect("Failed to declare jit_hashmap_shape_id");
ffi_funcs.insert("jit_hashmap_shape_id".to_string(), func_id);
}
{
let mut sig = module.make_signature();
sig.params.push(AbiParam::new(types::I64)); sig.params.push(AbiParam::new(types::I64)); sig.returns.push(AbiParam::new(types::I64)); let func_id = module
.declare_function("jit_hashmap_value_at", Linkage::Import, &sig)
.expect("Failed to declare jit_hashmap_value_at");
ffi_funcs.insert("jit_hashmap_value_at".to_string(), func_id);
}
}