1pub(super) use super::specialization::{SpecializationRegistry, SpecializedLayout};
2pub(super) use super::trace::InlineTrace;
3pub(super) use super::trace::ValueType;
4pub(super) use super::{CompiledTrace, Guard, GuardKind, Trace, TraceId, TraceOp};
5pub(super) use crate::bytecode::{Function, Value, ValueTag};
6pub(super) use crate::jit;
7pub(super) use crate::Result;
8pub(super) use alloc::vec::Vec;
9pub(super) use core::mem;
10pub(super) use dynasmrt::{dynasm, x64::Assembler, DynasmApi, DynasmLabelApi};
11use hashbrown::HashMap;
12
13pub(super) const MIN_JIT_STACK_SIZE: i32 = 504;
17
18pub(super) const SPECIALIZED_BASE_OFFSET: i32 = -64;
20pub(super) const SPECIALIZED_SLOT_SIZE: i32 = 32;
22pub(super) const SPECIALIZED_STACK_BASE: i32 = 64;
25mod arithmetic;
26mod builder;
27mod comparisons;
28mod guards;
29mod logic;
30mod memory;
31mod registers;
32mod specialization;
33#[derive(Debug, Clone)]
35pub(super) struct SpecializedValue {
36 pub stack_offset: i32,
37}
38
39pub struct JitCompiler {
40 pub(super) ops: Assembler,
41 pub(super) leaked_constants: Vec<*const Value>,
42 fail_stack: Vec<dynasmrt::DynamicLabel>,
43 exit_stack: Vec<dynasmrt::DynamicLabel>,
44 inline_depth: usize,
45 #[allow(dead_code)]
47 pub(super) specialization_registry: SpecializationRegistry,
48 pub(super) specialized_values: HashMap<usize, SpecializedValue>,
50 #[allow(dead_code)]
52 pub(super) next_specialized_id: usize,
53}
54
55impl Default for JitCompiler {
56 fn default() -> Self {
57 Self::new()
58 }
59}