luaur-code-gen 0.1.3

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::code_gen_counter::CodeGenCounter;
use crate::enums::condition_x_64::ConditionX64;
use crate::records::assembly_builder_x_64::AssemblyBuilderX64;
use crate::records::exit_handler_ir_lowering_x_64::ExitHandler;
use crate::records::interrupt_handler_ir_lowering_x_64::InterruptHandler;
use crate::records::ir_block::IrBlock;
use crate::records::ir_const::IrConst;
use crate::records::ir_function::IrFunction;
use crate::records::ir_inst::IrInst;
use crate::records::ir_op::IrOp;
use crate::records::ir_reg_alloc_x_64::IrRegAllocX64;
use crate::records::ir_value_location_tracking::IrValueLocationTracking;
use crate::records::label::Label;
use crate::records::lowering_stats::LoweringStats;
use crate::records::module_helpers::ModuleHelpers;
use crate::records::operand_x_64::OperandX64;
use crate::records::register_x_64::RegisterX64;
use crate::records::scoped_reg_x_64::ScopedRegX64;
use luaur_common::records::dense_hash_map::DenseHashMap;

#[derive(Debug, Clone)]
#[repr(C)]
pub struct IrLoweringX64 {
    pub build: *mut AssemblyBuilderX64,
    pub helpers: *mut ModuleHelpers,

    pub function: *mut IrFunction,
    pub stats: *mut LoweringStats,

    pub regs: IrRegAllocX64,

    pub value_tracker: IrValueLocationTracking,

    pub interrupt_handlers: alloc::vec::Vec<InterruptHandler>,
    pub exit_handlers: alloc::vec::Vec<ExitHandler>,
    pub exit_handler_map: DenseHashMap<u32, u32>,

    pub vector_and_mask: OperandX64,
    pub vector_or_mask: OperandX64,

    pub exit_sync_alloc_token: u32,
    pub exit_sync_inst_idx: u32,
}

impl IrLoweringX64 {
    pub(crate) const kInvalidInstIdx: u32 = !0u32;

    #[allow(dead_code)]
    fn interrupt_handler_field_shape(self_: Label, pcpos: u32, next: Label) -> InterruptHandler {
        InterruptHandler {
            self_: self_,
            pcpos: pcpos,
            next: next,
        }
    }

    #[allow(dead_code)]
    fn exit_handler_field_shape(self_: Label, pcpos: u32) -> ExitHandler {
        ExitHandler {
            self_: self_,
            pcpos: pcpos,
        }
    }
}