luaur-code-gen 0.1.1

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::ir_cmd::IrCmd;
use crate::enums::ir_op_kind::IrOpKind;
use crate::functions::vm_const_op::vm_const_op;
use crate::macros::codegen_assert::CODEGEN_ASSERT;
use crate::records::ir_builder::IrBuilder;
use crate::records::ir_op::IrOp;
use luaur_vm::type_aliases::t_value::TValue;

pub fn load_double_or_constant(build: &mut IrBuilder, arg: IrOp) -> IrOp {
    if arg.kind() == IrOpKind::VmConst {
        CODEGEN_ASSERT!(!build.function.proto.is_null());
        let protok_idx = vm_const_op(arg) as usize;
        let protok: TValue = unsafe { *(*build.function.proto).k.add(protok_idx) };
        CODEGEN_ASSERT!(protok.tt == luaur_vm::enums::lua_type::lua_Type::LUA_TNUMBER as i32);
        return build.const_double(unsafe { protok.value.n });
    }

    build.inst_ir_cmd_ir_op(IrCmd::LOAD_DOUBLE, arg)
}