luaur-code-gen 0.1.0

Native (A64/X64) code generation for Luau (Rust).
Documentation
use crate::enums::kind::Kind;
use crate::records::assembly_builder_a_64::AssemblyBuilderA64;

impl AssemblyBuilderA64 {
    pub fn patch_offset(&mut self, location: u32, value: i32, kind: Kind) {
        let offset = if kind == Kind::Imm26 { 0 } else { 5 };
        let range = match kind {
            Kind::Imm19 => 1 << 19,
            Kind::Imm26 => 1 << 26,
            Kind::Imm14 => 1 << 14,
        };

        debug_assert!((self.code[location as usize] & (((range - 1) as u32) << offset)) == 0);

        if value > -(range >> 1) && value < (range >> 1) {
            self.code[location as usize] |= ((value as u32) & (range - 1) as u32) << offset;
        } else {
            self.overflowed = true;
        }
    }
}