luaur-code-gen 0.1.1

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::functions::is_fast_call::is_fast_call;
use crate::functions::is_jump_d::is_jump_d;
use crate::functions::is_skip_c::is_skip_c;
use luaur_common::enums::luau_opcode::LuauOpcode;
use luaur_common::macros::luau_insn_c::LUAU_INSN_C;
use luaur_common::macros::luau_insn_d::LUAU_INSN_D;
use luaur_common::macros::luau_insn_e::LUAU_INSN_E;
use luaur_common::macros::luau_insn_op::LUAU_INSN_OP;

pub fn get_jump_target(insn: u32, pc: u32) -> i32 {
    let op_val = LUAU_INSN_OP(insn) as u8;
    let op: LuauOpcode = unsafe { core::mem::transmute(op_val) };

    if is_jump_d(op) {
        (pc as i32) + LUAU_INSN_D(insn) + 1
    } else if is_fast_call(op) {
        (pc as i32) + (LUAU_INSN_C(insn) as i32) + 2
    } else if is_skip_c(op) && LUAU_INSN_C(insn) != 0 {
        (pc as i32) + (LUAU_INSN_C(insn) as i32) + 1
    } else if op == LuauOpcode::LOP_JUMPX {
        (pc as i32) + LUAU_INSN_E(insn) + 1
    } else {
        -1
    }
}