Sign in

    machv_emit

    Reusable MachV machine-code emitter

    compiler
    machine-code
    emitter
    jit
    Download zip
    Author
    Version
    0.2.1
    License
    Apache-2.0
    Last updated
    3 months ago
    Downloads
    48

    #machv_emit

    Reusable MachV machine-code emitter.

    machv_emit turns allocated MachV functions into machine-code objects and relocation/fixup metadata. It is intended for embedders that want to supply their own runtime-symbol resolution and executable-memory policy.

    #Packages

    • Milky2018/machv_emit: machine-code objects, emission entry points, stack-frame handling, relocation/fixup metadata, and target dispatch.
    • Milky2018/machv_emit/isaregs: emitter-facing ISA register helpers.

    #When to use it

    Use machv_emit after a MachV function has been lowered and allocated. The emitter produces bytes plus symbolic metadata; it does not decide how runtime helper names become process addresses or how executable memory is allocated.

    #Example: emit target-specific bytes

    MachineCode can also be used directly by embedders that need small stubs or tests. Pass the ISA explicitly so the generated bytes are independent of the machine running the test.

    ///|
    test "emit a tiny AArch64 return stub" {
    let code = MachineCode::MachineCode(isa=AArch64, record_disasm=false)
    code.emit_ret(30)
    let bytes = code.get_bytes()
    inspect(bytes.length(), content="4")
    inspect(code.current_pos(), content="4")
    }

    #Example: collect relocation metadata

    Runtime and function-address fixups stay symbolic. A product JIT such as Wasmoon resolves them later in its own embedding layer.

    ///|
    test "record an unresolved external call fixup" {
    let code = MachineCode::MachineCode(isa=AMD64, record_disasm=false)
    code.emit_byte(0xe8)
    code.add_external_call_fixup(1, ExternalName("env.print_i32"))
    for _ in 0..<4 {
    code.emit_byte(0)
    }
    inspect(code.get_bytes().length(), content="5")
    inspect(code.get_call_fixups().length(), content="1")
    }

    #Boundary

    Emitters should produce code plus symbolic metadata. Wasmoon-specific runtime helper lookup, JIT context ownership, and native FFI glue belong in wasmoon_jit.

    Amd64ConstEntry

    type Amd64ConstEntry

    CallFixup

    pub(all) struct CallFixup {
    offset : Int
    target :
    RelocTarget

    veneer_offset : Int
    } derive(Eq,
    Debug
    )

    Fixup for direct function call branches

    CondCode

    pub(all) enum CondCode {
    EQ
    NE
    HS
    LO
    MI
    PL
    VS
    VC
    HI
    LS
    GE
    LT
    GT
    LE
    AL
    }

    AArch64 condition codes

    CondCode::to_int

    fn CondCode::to_int(self : CondCode) -> Int

    EmitStackFrame

    pub struct EmitStackFrame {
    setup_area_size : Int
    gpr_save_size : Int
    fpr_save_size : Int
    spill_size : Int
    outgoing_args_size : Int
    gpr_save_offset : Int
    fpr_save_offset : Int
    spill_offset : Int
    outgoing_args_offset : Int
    total_size : Int
    frame_size : Int
    saved_gprs : Array[Int]
    saved_fprs : Array[Int]
    has_setup_area : Bool
    needs_context_reg : Bool
    cache_context_0 : Bool
    cache_context_1 : Bool
    embedding_abi :
    EmbeddingABI
    ?
    }

    Encapsulates the stack frame layout for a JIT-compiled function

    EmitStackFrame::build

    fn EmitStackFrame::build(clobbered_gprs : Array[Int], clobbered_fprs : Array[Int], num_spill_slots : Int, has_calls? : Bool, outgoing_args_size? : Int, needs_context_reg? : Bool, cache_context_0? : Bool, cache_context_1? : Bool, force_frame_setup? : Bool, has_incoming_stack_args? : Bool, embedding_abi? :
    EmbeddingABI
    ?, isa? :
    ISA
    ) -> EmitStackFrame

    Build a EmitStackFrame from function metadata

    Parameters:
    • clobbered_gprs: GPRs that are clobbered and need saving (callee-saved only)
    • clobbered_fprs: FPRs that are clobbered and need saving (callee-saved only)
    • num_spill_slots: Number of spill slots needed
    • has_calls: Whether function contains calls (requires FP/LR save)
    • outgoing_args_size: Stack space needed for outgoing call arguments
    • needs_context_reg: Whether function uses context (pinned reg)
    • has_incoming_stack_args: Whether function reads any stack parameters

    EmitStackFrame::context_cache_0_index

    fn EmitStackFrame::context_cache_0_index(self : EmitStackFrame) -> Int?

    EmitStackFrame::context_cache_1_index

    fn EmitStackFrame::context_cache_1_index(self : EmitStackFrame) -> Int?

    EmitStackFrame::context_reg_index

    fn EmitStackFrame::context_reg_index(self : EmitStackFrame) -> Int

    EmitStackFrame::extra_results_ptr_index

    fn EmitStackFrame::extra_results_ptr_index(self : EmitStackFrame) -> Int?

    EmitStackFrame::get_fpr_save_offset

    fn EmitStackFrame::get_fpr_save_offset(self : EmitStackFrame, reg_idx : Int) -> Int

    Get the offset for saving a specific FPR (relative to SP after frame setup)

    EmitStackFrame::get_gpr_save_offset

    fn EmitStackFrame::get_gpr_save_offset(self : EmitStackFrame, reg_idx : Int) -> Int

    Get the offset for saving a specific GPR (relative to SP after frame setup)

    EmitStackFrame::get_outgoing_arg_offset

    fn EmitStackFrame::get_outgoing_arg_offset(self : EmitStackFrame, arg_offset : Int) -> Int

    Get the stack offset for outgoing arguments

    EmitStackFrame::get_spill_offset

    fn EmitStackFrame::get_spill_offset(self : EmitStackFrame, slot_idx : Int) -> Int

    Get the stack offset for a spill slot index

    EmitStackFrame::require_call_conv_layout

    EmitStackFrame::require_context_reg

    EmitStackFrame::require_embedding_abi

    EmitStackFrame::require_embedding_context_layout

    EmitTarget

    pub(all) enum EmitTarget {
    AArch64
    X64
    } derive(Eq,
    Debug
    )

    Fixup

    type Fixup

    A fixup for a forward branch

    FixupKind

    pub(all) enum FixupKind {
    Branch26
    Branch19
    }

    Kind of fixup

    FuncAddrFixup

    pub(all) struct FuncAddrFixup {
    offset : Int
    target :
    RelocTarget

    reg : Int
    } derive(Eq,
    Debug
    )

    Fixup for direct function address loads

    Instruction

    type Instruction

    AArch64 Instruction enum - covers all instruction types

    Instruction::emit

    fn Instruction::emit(self : Instruction, mc : MachineCode) -> Unit

    MachineCode

    pub struct MachineCode {
    isa :
    ISA

    bytes : Array[Int]
    pos : Int
    labels : Map[Int, Int]
    next_internal_label : Int
    fixups : Array[Fixup]
    x86_rel32_fixups : Array[X86Rel32Fixup]
    func_addr_fixups : Array[FuncAddrFixup]
    call_fixups : Array[CallFixup]
    gc_safepoint_offsets : Array[Int]
    gc_safepoint_root_counts : Array[Int]
    gc_safepoint_root_indices : Array[Array[Int]]
    amd64_const_labels : Map[String, Int]
    amd64_const_entries : Array[Amd64ConstEntry]
    disasm : Array[(Int, String)]
    record_disasm : Bool
    debug_prev_func_idx_spill_offset : Int
    }

    A buffer for accumulating machine code bytes

    MachineCode::MachineCode

    fn MachineCode::MachineCode(isa? :
    ISA
    , record_disasm? : Bool) -> MachineCode

    MachineCode::add_call_fixup

    fn MachineCode::add_call_fixup(self : MachineCode, offset : Int, symbol :
    CodeSymbol
    , veneer_offset? : Int) -> Unit

    Add a fixup for a direct call to an embedding-owned code symbol.

    MachineCode::add_call_target_fixup

    fn MachineCode::add_call_target_fixup(self : MachineCode, offset : Int, target :
    RelocTarget
    , veneer_offset? : Int) -> Unit

    Add a fixup for a relocatable direct call.

    MachineCode::add_code_addr_fixup

    fn MachineCode::add_code_addr_fixup(self : MachineCode, offset : Int, symbol :
    CodeSymbol
    , reg : Int) -> Unit

    Add a fixup for an embedding-owned code address load.

    MachineCode::add_external_call_fixup

    fn MachineCode::add_external_call_fixup(self : MachineCode, offset : Int, symbol :
    ExternalName
    , veneer_offset? : Int) -> Unit

    Add a fixup for a direct call to an external symbol.

    MachineCode::add_external_func_addr_fixup

    fn MachineCode::add_external_func_addr_fixup(self : MachineCode, offset : Int, symbol :
    ExternalName
    , reg : Int) -> Unit

    Add a fixup for an external function address load.

    MachineCode::add_fixup

    fn MachineCode::add_fixup(self : MachineCode, target_block : Int, kind : FixupKind) -> Unit

    Add a fixup for a forward branch

    MachineCode::add_func_addr_target_fixup

    fn MachineCode::add_func_addr_target_fixup(self : MachineCode, offset : Int, target :
    RelocTarget
    , reg : Int) -> Unit

    Add a fixup for a relocatable function address load.

    MachineCode::add_x86_rel32_fixup

    fn MachineCode::add_x86_rel32_fixup(self : MachineCode, target_block : Int, disp_offset : Int, next_ip_offset : Int) -> Unit

    Add an x86_64 rel32 fixup for a forward branch.

    MachineCode::align

    fn MachineCode::align(self : MachineCode, alignment : Int) -> Unit

    Align the code buffer to a given boundary Pads with NOP instructions (AArch64 NOP = 0xD503201F)

    MachineCode::align_block

    fn MachineCode::align_block(self : MachineCode) -> Unit

    Align to basic block boundary (typically 4 bytes for AArch64 instructions)

    MachineCode::align_function

    fn MachineCode::align_function(self : MachineCode) -> Unit

    Align to function boundary (typically 16 bytes on AArch64)

    MachineCode::annotate

    fn MachineCode::annotate(self : MachineCode, text : String) -> Unit

    Add a disassembly annotation at the current position

    MachineCode::current_pos

    fn MachineCode::current_pos(self : MachineCode) -> Int

    Current position in the buffer

    MachineCode::define_label

    fn MachineCode::define_label(self : MachineCode, block_id : Int) -> Unit

    Define a label at the current position

    MachineCode::dump_disasm

    fn MachineCode::dump_disasm(self : MachineCode) -> String

    Dump disassembly with hex bytes

    MachineCode::emit_add_imm

    fn MachineCode::emit_add_imm(self : MachineCode, rd : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_add_imm32

    fn MachineCode::emit_add_imm32(self : MachineCode, rd : Int, rn : Int, imm : Int) -> Unit

    MachineCode::emit_add_imm32_shifted12

    fn MachineCode::emit_add_imm32_shifted12(self : MachineCode, rd : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_add_imm_shifted12

    fn MachineCode::emit_add_imm_shifted12(self : MachineCode, rd : Int, rn : Int, imm12 : Int) -> Unit

    Emit ADD with immediate shifted left by 12 bits

    MachineCode::emit_add_reg

    fn MachineCode::emit_add_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_add_reg32

    fn MachineCode::emit_add_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_add_shifted

    fn MachineCode::emit_add_shifted(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_add_shifted32

    fn MachineCode::emit_add_shifted32(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_add_sxtw

    fn MachineCode::emit_add_sxtw(self : MachineCode, rd : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_add_uxtw

    fn MachineCode::emit_add_uxtw(self : MachineCode, rd : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_addv_b

    fn MachineCode::emit_addv_b(self : MachineCode, rd : Int, rn : Int) -> Unit

    ADDV Bd, Vn.8B - sum all bytes into Bd

    MachineCode::emit_adr

    fn MachineCode::emit_adr(self : MachineCode, rd : Int, offset : Int) -> Unit

    MachineCode::emit_amd64_const_pool

    fn MachineCode::emit_amd64_const_pool(self : MachineCode) -> Unit

    MachineCode::emit_and_imm

    fn MachineCode::emit_and_imm(self : MachineCode, rd : Int, rn : Int, imm_bits : Int) -> Unit

    MachineCode::emit_and_imm32

    fn MachineCode::emit_and_imm32(self : MachineCode, rd : Int, rn : Int, imm_bits : Int) -> Unit

    MachineCode::emit_and_reg

    fn MachineCode::emit_and_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_and_reg32

    fn MachineCode::emit_and_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_and_shifted

    fn MachineCode::emit_and_shifted(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_and_shifted32

    fn MachineCode::emit_and_shifted32(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_asr_imm

    fn MachineCode::emit_asr_imm(self : MachineCode, rd : Int, rn : Int, shift : Int) -> Unit

    MachineCode::emit_asr_imm32

    fn MachineCode::emit_asr_imm32(self : MachineCode, rd : Int, rn : Int, shift : Int) -> Unit

    MachineCode::emit_asr_reg

    fn MachineCode::emit_asr_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_asr_reg32

    fn MachineCode::emit_asr_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_b

    fn MachineCode::emit_b(self : MachineCode, target_block : Int) -> Unit

    MachineCode::emit_b_cond

    fn MachineCode::emit_b_cond(self : MachineCode, cond : Int, target_block : Int) -> Unit

    MachineCode::emit_bic_reg

    fn MachineCode::emit_bic_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_bic_reg32

    fn MachineCode::emit_bic_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_bl

    fn MachineCode::emit_bl(self : MachineCode, target_block : Int) -> Unit

    MachineCode::emit_bl_code

    fn MachineCode::emit_bl_code(self : MachineCode, symbol :
    CodeSymbol
    ) -> Unit

    Emit a direct BL with a relocation fixup to an embedding-owned code symbol.

    MachineCode::emit_bl_external

    fn MachineCode::emit_bl_external(self : MachineCode, symbol :
    ExternalName
    ) -> Unit

    Emit a direct BL with a relocation fixup to an external symbol.

    MachineCode::emit_bl_target

    fn MachineCode::emit_bl_target(self : MachineCode, target :
    RelocTarget
    ) -> Unit

    Emit a direct BL with a relocation fixup.

    MachineCode::emit_blr

    fn MachineCode::emit_blr(self : MachineCode, rn : Int) -> Unit

    MachineCode::emit_br

    fn MachineCode::emit_br(self : MachineCode, rn : Int) -> Unit

    MachineCode::emit_byte

    fn MachineCode::emit_byte(self : MachineCode, b : Int) -> Unit

    Emit a single byte

    MachineCode::emit_cbnz

    fn MachineCode::emit_cbnz(self : MachineCode, rt : Int, target_block : Int) -> Unit

    MachineCode::emit_cbnz32

    fn MachineCode::emit_cbnz32(self : MachineCode, rt : Int, target_block : Int) -> Unit

    MachineCode::emit_cbz

    fn MachineCode::emit_cbz(self : MachineCode, rt : Int, target_block : Int) -> Unit

    MachineCode::emit_cbz32

    fn MachineCode::emit_cbz32(self : MachineCode, rt : Int, target_block : Int) -> Unit

    MachineCode::emit_clz

    fn MachineCode::emit_clz(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_clz32

    fn MachineCode::emit_clz32(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_cmp_imm

    fn MachineCode::emit_cmp_imm(self : MachineCode, rn : Int, imm : Int) -> Unit

    MachineCode::emit_cmp_imm32

    fn MachineCode::emit_cmp_imm32(self : MachineCode, rn : Int, imm : Int) -> Unit

    MachineCode::emit_cmp_reg

    fn MachineCode::emit_cmp_reg(self : MachineCode, rn : Int, rm : Int) -> Unit

    MachineCode::emit_cmp_reg32

    fn MachineCode::emit_cmp_reg32(self : MachineCode, rn : Int, rm : Int) -> Unit

    MachineCode::emit_cnt_8b

    fn MachineCode::emit_cnt_8b(self : MachineCode, rd : Int, rn : Int) -> Unit

    CNT Vd.8B, Vn.8B - count bits in each byte

    MachineCode::emit_csel

    fn MachineCode::emit_csel(self : MachineCode, rd : Int, rn : Int, rm : Int, cond : Int) -> Unit

    MachineCode::emit_cset

    fn MachineCode::emit_cset(self : MachineCode, rd : Int, cond : Int) -> Unit

    MachineCode::emit_dmb_ish

    fn MachineCode::emit_dmb_ish(self : MachineCode) -> Unit

    MachineCode::emit_eon_reg

    fn MachineCode::emit_eon_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_eon_reg32

    fn MachineCode::emit_eon_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_eor_imm

    fn MachineCode::emit_eor_imm(self : MachineCode, rd : Int, rn : Int, imm_bits : Int) -> Unit

    MachineCode::emit_eor_imm32

    fn MachineCode::emit_eor_imm32(self : MachineCode, rd : Int, rn : Int, imm_bits : Int) -> Unit

    MachineCode::emit_eor_reg

    fn MachineCode::emit_eor_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_eor_reg32

    fn MachineCode::emit_eor_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_eor_shifted

    fn MachineCode::emit_eor_shifted(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_eor_shifted32

    fn MachineCode::emit_eor_shifted32(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_ext_16b

    fn MachineCode::emit_ext_16b(self : MachineCode, rd : Int, rn : Int, rm : Int, imm : Int) -> Unit

    EXT Vd.16B, Vn.16B, Vm.16B, #imm Extract and concatenate bytes from two vectors imm is the byte offset (0-15)

    MachineCode::emit_extr_imm

    fn MachineCode::emit_extr_imm(self : MachineCode, rd : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_extr_imm32

    fn MachineCode::emit_extr_imm32(self : MachineCode, rd : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_fabs_d

    fn MachineCode::emit_fabs_d(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fabs_s

    fn MachineCode::emit_fabs_s(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fadd_d

    fn MachineCode::emit_fadd_d(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fadd_s

    fn MachineCode::emit_fadd_s(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fcmp_d

    fn MachineCode::emit_fcmp_d(self : MachineCode, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fcmp_s

    fn MachineCode::emit_fcmp_s(self : MachineCode, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fcsel_d

    fn MachineCode::emit_fcsel_d(self : MachineCode, rd : Int, rn : Int, rm : Int, cond : Int) -> Unit

    MachineCode::emit_fcsel_s

    fn MachineCode::emit_fcsel_s(self : MachineCode, rd : Int, rn : Int, rm : Int, cond : Int) -> Unit

    MachineCode::emit_fcvt_d_s

    fn MachineCode::emit_fcvt_d_s(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fcvt_s_d

    fn MachineCode::emit_fcvt_s_d(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fcvtzs

    fn MachineCode::emit_fcvtzs(self : MachineCode, rd : Int, rn : Int, int64~ : Bool, double~ : Bool) -> Unit

    MachineCode::emit_fcvtzu

    fn MachineCode::emit_fcvtzu(self : MachineCode, rd : Int, rn : Int, int64~ : Bool, double~ : Bool) -> Unit

    MachineCode::emit_fdiv_d

    fn MachineCode::emit_fdiv_d(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fdiv_s

    fn MachineCode::emit_fdiv_s(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fmax_d

    fn MachineCode::emit_fmax_d(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fmax_s

    fn MachineCode::emit_fmax_s(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fmaxnm_d

    fn MachineCode::emit_fmaxnm_d(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fmaxnm_s

    fn MachineCode::emit_fmaxnm_s(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fmin_d

    fn MachineCode::emit_fmin_d(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fmin_s

    fn MachineCode::emit_fmin_s(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fminnm_d

    fn MachineCode::emit_fminnm_d(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fminnm_s

    fn MachineCode::emit_fminnm_s(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fmov_d

    fn MachineCode::emit_fmov_d(self : MachineCode, rd : Int, rm : Int) -> Unit

    MachineCode::emit_fmov_d_to_x

    fn MachineCode::emit_fmov_d_to_x(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fmov_s

    fn MachineCode::emit_fmov_s(self : MachineCode, rd : Int, rm : Int) -> Unit

    MachineCode::emit_fmov_s_to_w

    fn MachineCode::emit_fmov_s_to_w(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fmov_w_to_s

    fn MachineCode::emit_fmov_w_to_s(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fmov_x_to_d

    fn MachineCode::emit_fmov_x_to_d(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fmul_d

    fn MachineCode::emit_fmul_d(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fmul_s

    fn MachineCode::emit_fmul_s(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fneg_d

    fn MachineCode::emit_fneg_d(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fneg_s

    fn MachineCode::emit_fneg_s(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_frintm_d

    fn MachineCode::emit_frintm_d(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_frintm_s

    fn MachineCode::emit_frintm_s(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_frintn_d

    fn MachineCode::emit_frintn_d(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_frintn_s

    fn MachineCode::emit_frintn_s(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_frintp_d

    fn MachineCode::emit_frintp_d(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_frintp_s

    fn MachineCode::emit_frintp_s(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_frintz_d

    fn MachineCode::emit_frintz_d(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_frintz_s

    fn MachineCode::emit_frintz_s(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fsqrt_d

    fn MachineCode::emit_fsqrt_d(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fsqrt_s

    fn MachineCode::emit_fsqrt_s(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_fsub_d

    fn MachineCode::emit_fsub_d(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_fsub_s

    fn MachineCode::emit_fsub_s(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_inst

    fn MachineCode::emit_inst(self : MachineCode, b0 : Int, b1 : Int, b2 : Int, b3 : Int) -> Unit

    Emit 4 bytes (instruction) as 4 separate bytes

    MachineCode::emit_ldp_d_offset

    fn MachineCode::emit_ldp_d_offset(self : MachineCode, rt1 : Int, rt2 : Int, rn : Int, offset : Int) -> Unit

    Emit LDP for FPR pairs (64-bit D registers) with signed offset

    MachineCode::emit_ldp_d_post

    fn MachineCode::emit_ldp_d_post(self : MachineCode, rt1 : Int, rt2 : Int, rn : Int, imm : Int) -> Unit

    Emit LDP for FPR pairs with post-indexed addressing: LDP Dt1, Dt2, [Xn], #imm

    MachineCode::emit_ldp_offset

    fn MachineCode::emit_ldp_offset(self : MachineCode, rt1 : Int, rt2 : Int, rn : Int, offset : Int) -> Unit

    Emit LDP with signed offset (not pre/post indexed)

    MachineCode::emit_ldp_post

    fn MachineCode::emit_ldp_post(self : MachineCode, rt1 : Int, rt2 : Int, rn : Int, imm : Int) -> Unit

    MachineCode::emit_ldr_d_imm

    fn MachineCode::emit_ldr_d_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldr_d_post

    fn MachineCode::emit_ldr_d_post(self : MachineCode, rt : Int, rn : Int, simm9 : Int) -> Unit

    Emit LDR for FPR with post-indexed addressing: LDR Dt, [Xn], #simm9

    MachineCode::emit_ldr_imm

    fn MachineCode::emit_ldr_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldr_imm_signed

    fn MachineCode::emit_ldr_imm_signed(self : MachineCode, rt : Int, rn : Int, simm9 : Int) -> Unit

    MachineCode::emit_ldr_post

    fn MachineCode::emit_ldr_post(self : MachineCode, rt : Int, rn : Int, simm9 : Int) -> Unit

    Emit LDR with post-indexed addressing: LDR Xt, [Xn], #simm9

    MachineCode::emit_ldr_q_imm

    fn MachineCode::emit_ldr_q_imm(self : MachineCode, rt : Int, rn : Int, imm : Int) -> Unit

    LDR Qt, [Xn, #imm] (128-bit Q-register load)

    MachineCode::emit_ldr_reg_offset

    fn MachineCode::emit_ldr_reg_offset(self : MachineCode, rt : Int, rn : Int, rm : Int, option : Int, size_bits : Int, shift : Int) -> Unit

    MachineCode::emit_ldr_reg_scaled

    fn MachineCode::emit_ldr_reg_scaled(self : MachineCode, rt : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_ldr_s_imm

    fn MachineCode::emit_ldr_s_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldr_w_imm

    fn MachineCode::emit_ldr_w_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldr_w_reg_scaled

    fn MachineCode::emit_ldr_w_reg_scaled(self : MachineCode, rt : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_ldrb_imm

    fn MachineCode::emit_ldrb_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldrb_reg

    fn MachineCode::emit_ldrb_reg(self : MachineCode, rt : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_ldrh_imm

    fn MachineCode::emit_ldrh_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldrh_reg

    fn MachineCode::emit_ldrh_reg(self : MachineCode, rt : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_ldrsb_w_imm

    fn MachineCode::emit_ldrsb_w_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldrsb_x_imm

    fn MachineCode::emit_ldrsb_x_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldrsh_w_imm

    fn MachineCode::emit_ldrsh_w_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldrsh_x_imm

    fn MachineCode::emit_ldrsh_x_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_ldrsw_imm

    fn MachineCode::emit_ldrsw_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_load_imm64

    fn MachineCode::emit_load_imm64(self : MachineCode, rd : Int, imm : Int64) -> Unit

    MachineCode::emit_load_imm64_fixed

    fn MachineCode::emit_load_imm64_fixed(self : MachineCode, rd : Int, imm : Int64) -> Unit

    Load 64-bit immediate with fixed 4 instructions (MOVZ + 3 MOVKs or NOPs). Use this when you need a predictable instruction count for branch offset calculations.

    MachineCode::emit_lsl_imm

    fn MachineCode::emit_lsl_imm(self : MachineCode, rd : Int, rn : Int, shift : Int) -> Unit

    MachineCode::emit_lsl_imm32

    fn MachineCode::emit_lsl_imm32(self : MachineCode, rd : Int, rn : Int, shift : Int) -> Unit

    MachineCode::emit_lsl_reg

    fn MachineCode::emit_lsl_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_lsl_reg32

    fn MachineCode::emit_lsl_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_lsr_imm

    fn MachineCode::emit_lsr_imm(self : MachineCode, rd : Int, rn : Int, shift : Int) -> Unit

    MachineCode::emit_lsr_imm32

    fn MachineCode::emit_lsr_imm32(self : MachineCode, rd : Int, rn : Int, shift : Int) -> Unit

    MachineCode::emit_lsr_reg

    fn MachineCode::emit_lsr_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_lsr_reg32

    fn MachineCode::emit_lsr_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_madd

    fn MachineCode::emit_madd(self : MachineCode, rd : Int, rn : Int, rm : Int, ra : Int) -> Unit

    MachineCode::emit_madd32

    fn MachineCode::emit_madd32(self : MachineCode, rd : Int, rn : Int, rm : Int, ra : Int) -> Unit

    MachineCode::emit_mneg

    fn MachineCode::emit_mneg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_mneg32

    fn MachineCode::emit_mneg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_mov_reg

    fn MachineCode::emit_mov_reg(self : MachineCode, rd : Int, rm : Int) -> Unit

    MachineCode::emit_mov_reg32

    fn MachineCode::emit_mov_reg32(self : MachineCode, rd : Int, rm : Int) -> Unit

    MachineCode::emit_movk

    fn MachineCode::emit_movk(self : MachineCode, rd : Int, imm16 : Int, shift : Int) -> Unit

    MachineCode::emit_movz

    fn MachineCode::emit_movz(self : MachineCode, rd : Int, imm16 : Int, shift : Int) -> Unit

    MachineCode::emit_msub

    fn MachineCode::emit_msub(self : MachineCode, rd : Int, rn : Int, rm : Int, ra : Int) -> Unit

    MachineCode::emit_msub32

    fn MachineCode::emit_msub32(self : MachineCode, rd : Int, rn : Int, rm : Int, ra : Int) -> Unit

    MachineCode::emit_mul

    fn MachineCode::emit_mul(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_mul32

    fn MachineCode::emit_mul32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_mvn

    fn MachineCode::emit_mvn(self : MachineCode, rd : Int, rm : Int) -> Unit

    MachineCode::emit_mvn32

    fn MachineCode::emit_mvn32(self : MachineCode, rd : Int, rm : Int) -> Unit

    MachineCode::emit_nop

    fn MachineCode::emit_nop(self : MachineCode) -> Unit

    MachineCode::emit_orn_reg

    fn MachineCode::emit_orn_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_orn_reg32

    fn MachineCode::emit_orn_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_orr_imm

    fn MachineCode::emit_orr_imm(self : MachineCode, rd : Int, rn : Int, imm_bits : Int) -> Unit

    MachineCode::emit_orr_imm32

    fn MachineCode::emit_orr_imm32(self : MachineCode, rd : Int, rn : Int, imm_bits : Int) -> Unit

    MachineCode::emit_orr_reg

    fn MachineCode::emit_orr_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_orr_reg32

    fn MachineCode::emit_orr_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_orr_shifted

    fn MachineCode::emit_orr_shifted(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_orr_shifted32

    fn MachineCode::emit_orr_shifted32(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_rbit

    fn MachineCode::emit_rbit(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_rbit32

    fn MachineCode::emit_rbit32(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_ret

    fn MachineCode::emit_ret(self : MachineCode, rn : Int) -> Unit

    MachineCode::emit_ror_imm

    fn MachineCode::emit_ror_imm(self : MachineCode, rd : Int, rn : Int, shift : Int) -> Unit

    MachineCode::emit_ror_imm32

    fn MachineCode::emit_ror_imm32(self : MachineCode, rd : Int, rn : Int, shift : Int) -> Unit

    MachineCode::emit_ror_reg

    fn MachineCode::emit_ror_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_ror_reg32

    fn MachineCode::emit_ror_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_scvtf

    fn MachineCode::emit_scvtf(self : MachineCode, rd : Int, rn : Int, int64~ : Bool, double~ : Bool) -> Unit

    MachineCode::emit_sdiv

    fn MachineCode::emit_sdiv(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_sdiv32

    fn MachineCode::emit_sdiv32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_smulh

    fn MachineCode::emit_smulh(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    SMULH Xd, Xn, Xm - Signed multiply high (64-bit)

    MachineCode::emit_smull

    fn MachineCode::emit_smull(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    SMULL Xd, Wn, Wm - Signed 32x32->64 multiply

    MachineCode::emit_stp_d_offset

    fn MachineCode::emit_stp_d_offset(self : MachineCode, rt1 : Int, rt2 : Int, rn : Int, offset : Int) -> Unit

    Emit STP for FPR pairs (64-bit D registers) with signed offset

    MachineCode::emit_stp_d_pre

    fn MachineCode::emit_stp_d_pre(self : MachineCode, rt1 : Int, rt2 : Int, rn : Int, imm : Int) -> Unit

    Emit STP for FPR pairs with pre-indexed addressing: STP Dt1, Dt2, [Xn, #imm]!

    MachineCode::emit_stp_offset

    fn MachineCode::emit_stp_offset(self : MachineCode, rt1 : Int, rt2 : Int, rn : Int, offset : Int) -> Unit

    Emit STP with signed offset (not pre/post indexed)

    MachineCode::emit_stp_pre

    fn MachineCode::emit_stp_pre(self : MachineCode, rt1 : Int, rt2 : Int, rn : Int, imm : Int) -> Unit

    MachineCode::emit_str_d_imm

    fn MachineCode::emit_str_d_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_str_d_pre

    fn MachineCode::emit_str_d_pre(self : MachineCode, rt : Int, rn : Int, simm9 : Int) -> Unit

    Emit STR for FPR with pre-indexed addressing: STR Dt, [Xn, #simm9]!

    MachineCode::emit_str_imm

    fn MachineCode::emit_str_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_str_pre

    fn MachineCode::emit_str_pre(self : MachineCode, rt : Int, rn : Int, simm9 : Int) -> Unit

    Emit STR with pre-indexed addressing: STR Xt, [Xn, #simm9]!

    MachineCode::emit_str_q_imm

    fn MachineCode::emit_str_q_imm(self : MachineCode, rt : Int, rn : Int, imm : Int) -> Unit

    STR Qt, [Xn, #imm] (128-bit Q-register store)

    MachineCode::emit_str_reg_offset

    fn MachineCode::emit_str_reg_offset(self : MachineCode, rt : Int, rn : Int, rm : Int, option : Int, size_bits : Int, shift : Int) -> Unit

    MachineCode::emit_str_reg_scaled

    fn MachineCode::emit_str_reg_scaled(self : MachineCode, rt : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_str_s_imm

    fn MachineCode::emit_str_s_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_str_w_imm

    fn MachineCode::emit_str_w_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_str_w_reg_scaled

    fn MachineCode::emit_str_w_reg_scaled(self : MachineCode, rt : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_strb_imm

    fn MachineCode::emit_strb_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_strb_reg

    fn MachineCode::emit_strb_reg(self : MachineCode, rt : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_strh_imm

    fn MachineCode::emit_strh_imm(self : MachineCode, rt : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_strh_reg

    fn MachineCode::emit_strh_reg(self : MachineCode, rt : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_sub_imm

    fn MachineCode::emit_sub_imm(self : MachineCode, rd : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_sub_imm32

    fn MachineCode::emit_sub_imm32(self : MachineCode, rd : Int, rn : Int, imm : Int) -> Unit

    MachineCode::emit_sub_imm32_shifted12

    fn MachineCode::emit_sub_imm32_shifted12(self : MachineCode, rd : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_sub_imm_shifted12

    fn MachineCode::emit_sub_imm_shifted12(self : MachineCode, rd : Int, rn : Int, imm12 : Int) -> Unit

    MachineCode::emit_sub_reg

    fn MachineCode::emit_sub_reg(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_sub_reg32

    fn MachineCode::emit_sub_reg32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_sub_shifted

    fn MachineCode::emit_sub_shifted(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_sub_shifted32

    fn MachineCode::emit_sub_shifted32(self : MachineCode, rd : Int, rn : Int, rm : Int, shift :
    ShiftType
    , amount : Int) -> Unit

    MachineCode::emit_sub_sxtw

    fn MachineCode::emit_sub_sxtw(self : MachineCode, rd : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_sub_uxtw

    fn MachineCode::emit_sub_uxtw(self : MachineCode, rd : Int, rn : Int, rm : Int, shift : Int) -> Unit

    MachineCode::emit_sxtb_w

    fn MachineCode::emit_sxtb_w(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_sxtb_x

    fn MachineCode::emit_sxtb_x(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_sxth_w

    fn MachineCode::emit_sxth_w(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_sxth_x

    fn MachineCode::emit_sxth_x(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_sxtw

    fn MachineCode::emit_sxtw(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_ucvtf

    fn MachineCode::emit_ucvtf(self : MachineCode, rd : Int, rn : Int, int64~ : Bool, double~ : Bool) -> Unit

    MachineCode::emit_udiv

    fn MachineCode::emit_udiv(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_udiv32

    fn MachineCode::emit_udiv32(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    MachineCode::emit_umulh

    fn MachineCode::emit_umulh(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    UMULH Xd, Xn, Xm - Unsigned multiply high (64-bit)

    MachineCode::emit_umull

    fn MachineCode::emit_umull(self : MachineCode, rd : Int, rn : Int, rm : Int) -> Unit

    UMULL Xd, Wn, Wm - Unsigned 32x32->64 multiply

    MachineCode::emit_uxtb_w

    fn MachineCode::emit_uxtb_w(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_uxtb_x

    fn MachineCode::emit_uxtb_x(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_uxth_w

    fn MachineCode::emit_uxth_w(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::emit_uxth_x

    fn MachineCode::emit_uxth_x(self : MachineCode, rd : Int, rn : Int) -> Unit

    MachineCode::get_bytes

    fn MachineCode::get_bytes(self : MachineCode) -> Array[Int]

    Get the generated bytes

    MachineCode::get_call_fixups

    fn MachineCode::get_call_fixups(self : MachineCode) -> Array[CallFixup]

    Get direct function call fixups

    MachineCode::get_func_addr_fixups

    fn MachineCode::get_func_addr_fixups(self : MachineCode) -> Array[FuncAddrFixup]

    Get direct function address fixups

    MachineCode::get_gc_safepoint_offsets

    fn MachineCode::get_gc_safepoint_offsets(self : MachineCode) -> Array[Int]

    Get recorded GC safepoint offsets.

    MachineCode::get_gc_safepoint_root_counts

    fn MachineCode::get_gc_safepoint_root_counts(self : MachineCode) -> Array[Int]

    Get recorded GC safepoint root counts.

    MachineCode::get_gc_safepoint_root_indices

    fn MachineCode::get_gc_safepoint_root_indices(self : MachineCode) -> Array[Array[Int]]

    Get recorded GC safepoint root indices.

    MachineCode::hex_dump

    fn MachineCode::hex_dump(self : MachineCode) -> String

    Print machine code as hex dump

    MachineCode::intern_amd64_const

    fn MachineCode::intern_amd64_const(self : MachineCode, data : Bytes, align : Int) -> Int

    MachineCode::intern_amd64_const_f32

    fn MachineCode::intern_amd64_const_f32(self : MachineCode, bits : Int) -> Int

    MachineCode::intern_amd64_const_f64

    fn MachineCode::intern_amd64_const_f64(self : MachineCode, bits : Int64) -> Int

    MachineCode::new_internal_label

    fn MachineCode::new_internal_label(self : MachineCode) -> Int

    MachineCode::record_gc_safepoint

    fn MachineCode::record_gc_safepoint(self : MachineCode, offset : Int, root_count? : Int, root_indices? : Array[Int]) -> Int

    Record a GC safepoint at current code offset.

    MachineCode::resolve_fixups

    fn MachineCode::resolve_fixups(self : MachineCode) -> Unit

    Resolve all pending fixups

    MachineCode::set_debug_prev_func_idx_spill_offset

    fn MachineCode::set_debug_prev_func_idx_spill_offset(self : MachineCode, offset : Int) -> Unit

    MachineCode::size

    fn MachineCode::size(self : MachineCode) -> Int

    Get size in bytes

    MachineCode::x86_emit_add_r32_imm32

    fn MachineCode::x86_emit_add_r32_imm32(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_add_r32_imm8

    fn MachineCode::x86_emit_add_r32_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_add_r_imm32

    fn MachineCode::x86_emit_add_r_imm32(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_add_r_imm8

    fn MachineCode::x86_emit_add_r_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_add_rr

    fn MachineCode::x86_emit_add_rr(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_add_rr32

    fn MachineCode::x86_emit_add_rr32(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_add_rsp_imm32

    fn MachineCode::x86_emit_add_rsp_imm32(self : MachineCode, imm : Int) -> Unit

    MachineCode::x86_emit_addpd_xmm_xmm

    fn MachineCode::x86_emit_addpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_addps_xmm_xmm

    fn MachineCode::x86_emit_addps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_addsd_xmm_xmm

    fn MachineCode::x86_emit_addsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_addss_xmm_xmm

    fn MachineCode::x86_emit_addss_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_and_r_imm8_sxb64

    fn MachineCode::x86_emit_and_r_imm8_sxb64(self : MachineCode, reg : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_and_rr

    fn MachineCode::x86_emit_and_rr(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_and_rr32

    fn MachineCode::x86_emit_and_rr32(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_andpd_xmm_xmm

    fn MachineCode::x86_emit_andpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_andps_xmm_xmm

    fn MachineCode::x86_emit_andps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_bsr_r32_r32

    fn MachineCode::x86_emit_bsr_r32_r32(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_bsr_r64_r64

    fn MachineCode::x86_emit_bsr_r64_r64(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_call_r64

    fn MachineCode::x86_emit_call_r64(self : MachineCode, reg : Int) -> Unit

    MachineCode::x86_emit_cdq

    fn MachineCode::x86_emit_cdq(self : MachineCode) -> Unit

    MachineCode::x86_emit_cmovcc_rr

    fn MachineCode::x86_emit_cmovcc_rr(self : MachineCode, cond :
    Cond
    , dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_cmovcc_rr32

    fn MachineCode::x86_emit_cmovcc_rr32(self : MachineCode, cond :
    Cond
    , dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_cmp_r32_imm32

    fn MachineCode::x86_emit_cmp_r32_imm32(self : MachineCode, reg : Int, imm : Int) -> Unit

    MachineCode::x86_emit_cmp_r_imm32

    fn MachineCode::x86_emit_cmp_r_imm32(self : MachineCode, reg : Int, imm : Int) -> Unit

    MachineCode::x86_emit_cmp_rr

    fn MachineCode::x86_emit_cmp_rr(self : MachineCode, lhs : Int, rhs : Int) -> Unit

    MachineCode::x86_emit_cmp_rr32

    fn MachineCode::x86_emit_cmp_rr32(self : MachineCode, lhs : Int, rhs : Int) -> Unit

    MachineCode::x86_emit_cmppd_xmm_xmm_imm8

    fn MachineCode::x86_emit_cmppd_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_cmpps_xmm_xmm_imm8

    fn MachineCode::x86_emit_cmpps_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_cqo

    fn MachineCode::x86_emit_cqo(self : MachineCode) -> Unit

    MachineCode::x86_emit_cvtdq2pd_xmm_xmm

    fn MachineCode::x86_emit_cvtdq2pd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvtdq2ps_xmm_xmm

    fn MachineCode::x86_emit_cvtdq2ps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvtpd2ps_xmm_xmm

    fn MachineCode::x86_emit_cvtpd2ps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvtps2pd_xmm_xmm

    fn MachineCode::x86_emit_cvtps2pd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvtsd2ss_xmm_xmm

    fn MachineCode::x86_emit_cvtsd2ss_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvtsi2sd_xmm_r32

    fn MachineCode::x86_emit_cvtsi2sd_xmm_r32(self : MachineCode, dst_xmm : Int, src : Int) -> Unit

    MachineCode::x86_emit_cvtsi2sd_xmm_r64

    fn MachineCode::x86_emit_cvtsi2sd_xmm_r64(self : MachineCode, dst_xmm : Int, src : Int) -> Unit

    MachineCode::x86_emit_cvtsi2ss_xmm_r32

    fn MachineCode::x86_emit_cvtsi2ss_xmm_r32(self : MachineCode, dst_xmm : Int, src : Int) -> Unit

    MachineCode::x86_emit_cvtsi2ss_xmm_r64

    fn MachineCode::x86_emit_cvtsi2ss_xmm_r64(self : MachineCode, dst_xmm : Int, src : Int) -> Unit

    MachineCode::x86_emit_cvtss2sd_xmm_xmm

    fn MachineCode::x86_emit_cvtss2sd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvttpd2dq_xmm_xmm

    fn MachineCode::x86_emit_cvttpd2dq_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvttps2dq_xmm_xmm

    fn MachineCode::x86_emit_cvttps2dq_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvttsd2si_r32_xmm

    fn MachineCode::x86_emit_cvttsd2si_r32_xmm(self : MachineCode, dst : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvttsd2si_r64_xmm

    fn MachineCode::x86_emit_cvttsd2si_r64_xmm(self : MachineCode, dst : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvttss2si_r32_xmm

    fn MachineCode::x86_emit_cvttss2si_r32_xmm(self : MachineCode, dst : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_cvttss2si_r64_xmm

    fn MachineCode::x86_emit_cvttss2si_r64_xmm(self : MachineCode, dst : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_div_r32

    fn MachineCode::x86_emit_div_r32(self : MachineCode, divisor : Int) -> Unit

    MachineCode::x86_emit_div_r64

    fn MachineCode::x86_emit_div_r64(self : MachineCode, divisor : Int) -> Unit

    MachineCode::x86_emit_divpd_xmm_xmm

    fn MachineCode::x86_emit_divpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_divps_xmm_xmm

    fn MachineCode::x86_emit_divps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_divsd_xmm_xmm

    fn MachineCode::x86_emit_divsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_divss_xmm_xmm

    fn MachineCode::x86_emit_divss_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_idiv_r32

    fn MachineCode::x86_emit_idiv_r32(self : MachineCode, divisor : Int) -> Unit

    MachineCode::x86_emit_idiv_r64

    fn MachineCode::x86_emit_idiv_r64(self : MachineCode, divisor : Int) -> Unit

    MachineCode::x86_emit_imul1_r64

    fn MachineCode::x86_emit_imul1_r64(self : MachineCode, src : Int) -> Unit

    MachineCode::x86_emit_imul_rr

    fn MachineCode::x86_emit_imul_rr(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_imul_rr32

    fn MachineCode::x86_emit_imul_rr32(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_insertps_xmm_xmm_imm8

    fn MachineCode::x86_emit_insertps_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_jcc_rel32

    fn MachineCode::x86_emit_jcc_rel32(self : MachineCode, cond :
    Cond
    , target_block : Int) -> Unit

    MachineCode::x86_emit_jmp_r64

    fn MachineCode::x86_emit_jmp_r64(self : MachineCode, reg : Int) -> Unit

    MachineCode::x86_emit_jmp_rel32

    fn MachineCode::x86_emit_jmp_rel32(self : MachineCode, target_block : Int) -> Unit

    MachineCode::x86_emit_lea_r32_base_index_scale_disp

    fn MachineCode::x86_emit_lea_r32_base_index_scale_disp(self : MachineCode, dst : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_lea_r64_base_index_scale_disp

    fn MachineCode::x86_emit_lea_r64_base_index_scale_disp(self : MachineCode, dst : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_lea_r64_riprel32

    fn MachineCode::x86_emit_lea_r64_riprel32(self : MachineCode, dst : Int, target_label : Int) -> Unit

    MachineCode::x86_emit_maxpd_xmm_xmm

    fn MachineCode::x86_emit_maxpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_maxps_xmm_xmm

    fn MachineCode::x86_emit_maxps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_maxsd_xmm_xmm

    fn MachineCode::x86_emit_maxsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_maxss_xmm_xmm

    fn MachineCode::x86_emit_maxss_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_minpd_xmm_xmm

    fn MachineCode::x86_emit_minpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_minps_xmm_xmm

    fn MachineCode::x86_emit_minps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_minsd_xmm_xmm

    fn MachineCode::x86_emit_minsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_minss_xmm_xmm

    fn MachineCode::x86_emit_minss_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_mov_imm64

    fn MachineCode::x86_emit_mov_imm64(self : MachineCode, dst : Int, imm : Int64) -> Unit

    MachineCode::x86_emit_mov_m16_r16

    fn MachineCode::x86_emit_mov_m16_r16(self : MachineCode, base : Int, disp : Int, src : Int) -> Unit

    MachineCode::x86_emit_mov_m16_r16_base_index_scale_disp

    fn MachineCode::x86_emit_mov_m16_r16_base_index_scale_disp(self : MachineCode, base : Int, index : Int, scale : Int, disp : Int, src : Int) -> Unit

    MachineCode::x86_emit_mov_m32_r32

    fn MachineCode::x86_emit_mov_m32_r32(self : MachineCode, base : Int, disp : Int, src : Int) -> Unit

    MachineCode::x86_emit_mov_m32_r32_base_index_scale_disp

    fn MachineCode::x86_emit_mov_m32_r32_base_index_scale_disp(self : MachineCode, base : Int, index : Int, scale : Int, disp : Int, src : Int) -> Unit

    MachineCode::x86_emit_mov_m64_r64

    fn MachineCode::x86_emit_mov_m64_r64(self : MachineCode, base : Int, disp : Int, src : Int) -> Unit

    MachineCode::x86_emit_mov_m64_r64_base_index_scale_disp

    fn MachineCode::x86_emit_mov_m64_r64_base_index_scale_disp(self : MachineCode, base : Int, index : Int, scale : Int, disp : Int, src : Int) -> Unit

    MachineCode::x86_emit_mov_m8_r8

    fn MachineCode::x86_emit_mov_m8_r8(self : MachineCode, base : Int, disp : Int, src : Int) -> Unit

    MachineCode::x86_emit_mov_m8_r8_base_index_scale_disp

    fn MachineCode::x86_emit_mov_m8_r8_base_index_scale_disp(self : MachineCode, base : Int, index : Int, scale : Int, disp : Int, src : Int) -> Unit

    MachineCode::x86_emit_mov_r32_m32

    fn MachineCode::x86_emit_mov_r32_m32(self : MachineCode, dst : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_mov_r32_m32_base_index_scale_disp

    fn MachineCode::x86_emit_mov_r32_m32_base_index_scale_disp(self : MachineCode, dst : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_mov_r64_m64

    fn MachineCode::x86_emit_mov_r64_m64(self : MachineCode, dst : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_mov_r64_m64_base_index_scale_disp

    fn MachineCode::x86_emit_mov_r64_m64_base_index_scale_disp(self : MachineCode, dst : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_mov_rr

    fn MachineCode::x86_emit_mov_rr(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_mov_rr32

    fn MachineCode::x86_emit_mov_rr32(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_movaps_xmm_xmm

    fn MachineCode::x86_emit_movaps_xmm_xmm(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_movd_r32_xmm

    fn MachineCode::x86_emit_movd_r32_xmm(self : MachineCode, dst : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movd_xmm_r32

    fn MachineCode::x86_emit_movd_xmm_r32(self : MachineCode, dst_xmm : Int, src : Int) -> Unit

    MachineCode::x86_emit_movdqu_m128_xmm

    fn MachineCode::x86_emit_movdqu_m128_xmm(self : MachineCode, base : Int, disp : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movdqu_m128_xmm_base_index_scale_disp

    fn MachineCode::x86_emit_movdqu_m128_xmm_base_index_scale_disp(self : MachineCode, base : Int, index : Int, scale : Int, disp : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movdqu_xmm_m128

    fn MachineCode::x86_emit_movdqu_xmm_m128(self : MachineCode, dst_xmm : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movdqu_xmm_m128_base_index_scale_disp

    fn MachineCode::x86_emit_movdqu_xmm_m128_base_index_scale_disp(self : MachineCode, dst_xmm : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movlhps_xmm_xmm

    fn MachineCode::x86_emit_movlhps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movmskpd_r32_xmm

    fn MachineCode::x86_emit_movmskpd_r32_xmm(self : MachineCode, dst : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movmskps_r32_xmm

    fn MachineCode::x86_emit_movmskps_r32_xmm(self : MachineCode, dst : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movq_r64_xmm

    fn MachineCode::x86_emit_movq_r64_xmm(self : MachineCode, dst : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movq_xmm_r64

    fn MachineCode::x86_emit_movq_xmm_r64(self : MachineCode, dst_xmm : Int, src : Int) -> Unit

    MachineCode::x86_emit_movsd_m64_xmm

    fn MachineCode::x86_emit_movsd_m64_xmm(self : MachineCode, base : Int, disp : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movsd_m64_xmm_base_index_scale_disp

    fn MachineCode::x86_emit_movsd_m64_xmm_base_index_scale_disp(self : MachineCode, base : Int, index : Int, scale : Int, disp : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movsd_xmm_m64

    fn MachineCode::x86_emit_movsd_xmm_m64(self : MachineCode, dst_xmm : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movsd_xmm_m64_base_index_scale_disp

    fn MachineCode::x86_emit_movsd_xmm_m64_base_index_scale_disp(self : MachineCode, dst_xmm : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movsd_xmm_xmm

    fn MachineCode::x86_emit_movsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movss_m32_xmm

    fn MachineCode::x86_emit_movss_m32_xmm(self : MachineCode, base : Int, disp : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movss_m32_xmm_base_index_scale_disp

    fn MachineCode::x86_emit_movss_m32_xmm_base_index_scale_disp(self : MachineCode, base : Int, index : Int, scale : Int, disp : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movss_xmm_m32

    fn MachineCode::x86_emit_movss_xmm_m32(self : MachineCode, dst_xmm : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movss_xmm_m32_base_index_scale_disp

    fn MachineCode::x86_emit_movss_xmm_m32_base_index_scale_disp(self : MachineCode, dst_xmm : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movss_xmm_xmm

    fn MachineCode::x86_emit_movss_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_movsx_r32_r16

    fn MachineCode::x86_emit_movsx_r32_r16(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_movsx_r32_r8

    fn MachineCode::x86_emit_movsx_r32_r8(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_movsx_r64_m16

    fn MachineCode::x86_emit_movsx_r64_m16(self : MachineCode, dst : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movsx_r64_m16_base_index_scale_disp

    fn MachineCode::x86_emit_movsx_r64_m16_base_index_scale_disp(self : MachineCode, dst : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movsx_r64_m8

    fn MachineCode::x86_emit_movsx_r64_m8(self : MachineCode, dst : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movsx_r64_m8_base_index_scale_disp

    fn MachineCode::x86_emit_movsx_r64_m8_base_index_scale_disp(self : MachineCode, dst : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movsx_r64_r16

    fn MachineCode::x86_emit_movsx_r64_r16(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_movsx_r64_r8

    fn MachineCode::x86_emit_movsx_r64_r8(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_movsxd_r64_m32

    fn MachineCode::x86_emit_movsxd_r64_m32(self : MachineCode, dst : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movsxd_r64_r32

    fn MachineCode::x86_emit_movsxd_r64_r32(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_movzx_r32_m16

    fn MachineCode::x86_emit_movzx_r32_m16(self : MachineCode, dst : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movzx_r32_m16_base_index_scale_disp

    fn MachineCode::x86_emit_movzx_r32_m16_base_index_scale_disp(self : MachineCode, dst : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movzx_r32_m8

    fn MachineCode::x86_emit_movzx_r32_m8(self : MachineCode, dst : Int, base : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movzx_r32_m8_base_index_scale_disp

    fn MachineCode::x86_emit_movzx_r32_m8_base_index_scale_disp(self : MachineCode, dst : Int, base : Int, index : Int, scale : Int, disp : Int) -> Unit

    MachineCode::x86_emit_movzx_r32_r16

    fn MachineCode::x86_emit_movzx_r32_r16(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_movzx_r32_r8

    fn MachineCode::x86_emit_movzx_r32_r8(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_mul_r64

    fn MachineCode::x86_emit_mul_r64(self : MachineCode, src : Int) -> Unit

    MachineCode::x86_emit_mulpd_xmm_xmm

    fn MachineCode::x86_emit_mulpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_mulps_xmm_xmm

    fn MachineCode::x86_emit_mulps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_mulsd_xmm_xmm

    fn MachineCode::x86_emit_mulsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_mulss_xmm_xmm

    fn MachineCode::x86_emit_mulss_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_neg_r32

    fn MachineCode::x86_emit_neg_r32(self : MachineCode, reg : Int) -> Unit

    MachineCode::x86_emit_neg_r64

    fn MachineCode::x86_emit_neg_r64(self : MachineCode, reg : Int) -> Unit

    MachineCode::x86_emit_not_r32

    fn MachineCode::x86_emit_not_r32(self : MachineCode, reg : Int) -> Unit

    MachineCode::x86_emit_not_r64

    fn MachineCode::x86_emit_not_r64(self : MachineCode, reg : Int) -> Unit

    MachineCode::x86_emit_or_rr

    fn MachineCode::x86_emit_or_rr(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_or_rr32

    fn MachineCode::x86_emit_or_rr32(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_orpd_xmm_xmm

    fn MachineCode::x86_emit_orpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_orps_xmm_xmm

    fn MachineCode::x86_emit_orps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pabsb_xmm_xmm

    fn MachineCode::x86_emit_pabsb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pabsd_xmm_xmm

    fn MachineCode::x86_emit_pabsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pabsw_xmm_xmm

    fn MachineCode::x86_emit_pabsw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_packssdw_xmm_xmm

    fn MachineCode::x86_emit_packssdw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_packsswb_xmm_xmm

    fn MachineCode::x86_emit_packsswb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_packusdw_xmm_xmm

    fn MachineCode::x86_emit_packusdw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_packuswb_xmm_xmm

    fn MachineCode::x86_emit_packuswb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_padd_xmm_xmm

    fn MachineCode::x86_emit_padd_xmm_xmm(self : MachineCode, lane_size :
    LaneSize
    , dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_paddsb_xmm_xmm

    fn MachineCode::x86_emit_paddsb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_paddsw_xmm_xmm

    fn MachineCode::x86_emit_paddsw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_paddusb_xmm_xmm

    fn MachineCode::x86_emit_paddusb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_paddusw_xmm_xmm

    fn MachineCode::x86_emit_paddusw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_palignr_xmm_xmm_imm8

    fn MachineCode::x86_emit_palignr_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pand_xmm_xmm

    fn MachineCode::x86_emit_pand_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pandn_xmm_xmm

    fn MachineCode::x86_emit_pandn_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pavgb_xmm_xmm

    fn MachineCode::x86_emit_pavgb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pavgw_xmm_xmm

    fn MachineCode::x86_emit_pavgw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pcmpeq_xmm_xmm

    fn MachineCode::x86_emit_pcmpeq_xmm_xmm(self : MachineCode, lane_size :
    LaneSize
    , dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pcmpeqd_xmm_xmm

    fn MachineCode::x86_emit_pcmpeqd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pcmpgt_xmm_xmm

    fn MachineCode::x86_emit_pcmpgt_xmm_xmm(self : MachineCode, lane_size :
    LaneSize
    , dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pextrb_r32_xmm_imm8

    fn MachineCode::x86_emit_pextrb_r32_xmm_imm8(self : MachineCode, dst : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pextrd_r32_xmm_imm8

    fn MachineCode::x86_emit_pextrd_r32_xmm_imm8(self : MachineCode, dst : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pextrq_r64_xmm_imm8

    fn MachineCode::x86_emit_pextrq_r64_xmm_imm8(self : MachineCode, dst : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pextrw_r32_xmm_imm8

    fn MachineCode::x86_emit_pextrw_r32_xmm_imm8(self : MachineCode, dst : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pinsrb_xmm_r32_imm8

    fn MachineCode::x86_emit_pinsrb_xmm_r32_imm8(self : MachineCode, dst_xmm : Int, src : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pinsrd_xmm_r32_imm8

    fn MachineCode::x86_emit_pinsrd_xmm_r32_imm8(self : MachineCode, dst_xmm : Int, src : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pinsrq_xmm_r64_imm8

    fn MachineCode::x86_emit_pinsrq_xmm_r64_imm8(self : MachineCode, dst_xmm : Int, src : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pinsrw_xmm_r32_imm8

    fn MachineCode::x86_emit_pinsrw_xmm_r32_imm8(self : MachineCode, dst_xmm : Int, src : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pmaddubsw_xmm_xmm

    fn MachineCode::x86_emit_pmaddubsw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmaddwd_xmm_xmm

    fn MachineCode::x86_emit_pmaddwd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmaxsb_xmm_xmm

    fn MachineCode::x86_emit_pmaxsb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmaxsd_xmm_xmm

    fn MachineCode::x86_emit_pmaxsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmaxsw_xmm_xmm

    fn MachineCode::x86_emit_pmaxsw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmaxub_xmm_xmm

    fn MachineCode::x86_emit_pmaxub_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmaxud_xmm_xmm

    fn MachineCode::x86_emit_pmaxud_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmaxuw_xmm_xmm

    fn MachineCode::x86_emit_pmaxuw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pminsb_xmm_xmm

    fn MachineCode::x86_emit_pminsb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pminsd_xmm_xmm

    fn MachineCode::x86_emit_pminsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pminsw_xmm_xmm

    fn MachineCode::x86_emit_pminsw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pminub_xmm_xmm

    fn MachineCode::x86_emit_pminub_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pminud_xmm_xmm

    fn MachineCode::x86_emit_pminud_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pminuw_xmm_xmm

    fn MachineCode::x86_emit_pminuw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmovmskb_r32_xmm

    fn MachineCode::x86_emit_pmovmskb_r32_xmm(self : MachineCode, dst : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmovsxbw_xmm_xmm

    fn MachineCode::x86_emit_pmovsxbw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmovsxdq_xmm_xmm

    fn MachineCode::x86_emit_pmovsxdq_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmovsxwd_xmm_xmm

    fn MachineCode::x86_emit_pmovsxwd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmovzxbw_xmm_xmm

    fn MachineCode::x86_emit_pmovzxbw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmovzxdq_xmm_xmm

    fn MachineCode::x86_emit_pmovzxdq_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmovzxwd_xmm_xmm

    fn MachineCode::x86_emit_pmovzxwd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmuldq_xmm_xmm

    fn MachineCode::x86_emit_pmuldq_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmulhrsw_xmm_xmm

    fn MachineCode::x86_emit_pmulhrsw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmulhuw_xmm_xmm

    fn MachineCode::x86_emit_pmulhuw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmulhw_xmm_xmm

    fn MachineCode::x86_emit_pmulhw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmulld_xmm_xmm

    fn MachineCode::x86_emit_pmulld_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmullw_xmm_xmm

    fn MachineCode::x86_emit_pmullw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pmuludq_xmm_xmm

    fn MachineCode::x86_emit_pmuludq_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pop_r64

    fn MachineCode::x86_emit_pop_r64(self : MachineCode, reg : Int) -> Unit

    MachineCode::x86_emit_por_xmm_xmm

    fn MachineCode::x86_emit_por_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pshufb_xmm_xmm

    fn MachineCode::x86_emit_pshufb_xmm_xmm(self : MachineCode, dst_xmm : Int, mask_xmm : Int) -> Unit

    MachineCode::x86_emit_pshufd_xmm_xmm_imm8

    fn MachineCode::x86_emit_pshufd_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_pshuflw_xmm_xmm_imm8

    fn MachineCode::x86_emit_pshuflw_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_psll_xmm_xmm

    fn MachineCode::x86_emit_psll_xmm_xmm(self : MachineCode, lane_size :
    LaneSize
    , dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_pslld_xmm_imm8

    fn MachineCode::x86_emit_pslld_xmm_imm8(self : MachineCode, dst_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_psllq_xmm_imm8

    fn MachineCode::x86_emit_psllq_xmm_imm8(self : MachineCode, dst_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_psllw_xmm_imm8

    fn MachineCode::x86_emit_psllw_xmm_imm8(self : MachineCode, dst_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_psra_xmm_xmm

    fn MachineCode::x86_emit_psra_xmm_xmm(self : MachineCode, lane_size :
    LaneSize
    , dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_psrad_xmm_imm8

    fn MachineCode::x86_emit_psrad_xmm_imm8(self : MachineCode, dst_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_psrl_xmm_xmm

    fn MachineCode::x86_emit_psrl_xmm_xmm(self : MachineCode, lane_size :
    LaneSize
    , dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_psrld_xmm_imm8

    fn MachineCode::x86_emit_psrld_xmm_imm8(self : MachineCode, dst_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_psrlq_xmm_imm8

    fn MachineCode::x86_emit_psrlq_xmm_imm8(self : MachineCode, dst_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_psrlw_xmm_imm8

    fn MachineCode::x86_emit_psrlw_xmm_imm8(self : MachineCode, dst_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_psub_xmm_xmm

    fn MachineCode::x86_emit_psub_xmm_xmm(self : MachineCode, lane_size :
    LaneSize
    , dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_psubsb_xmm_xmm

    fn MachineCode::x86_emit_psubsb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_psubsw_xmm_xmm

    fn MachineCode::x86_emit_psubsw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_psubusb_xmm_xmm

    fn MachineCode::x86_emit_psubusb_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_psubusw_xmm_xmm

    fn MachineCode::x86_emit_psubusw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_punpckhbw_xmm_xmm

    fn MachineCode::x86_emit_punpckhbw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_punpckhdq_xmm_xmm

    fn MachineCode::x86_emit_punpckhdq_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_punpckhwd_xmm_xmm

    fn MachineCode::x86_emit_punpckhwd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_punpcklbw_xmm_xmm

    fn MachineCode::x86_emit_punpcklbw_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_punpckldq_xmm_xmm

    fn MachineCode::x86_emit_punpckldq_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_punpcklwd_xmm_xmm

    fn MachineCode::x86_emit_punpcklwd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_push_r64

    fn MachineCode::x86_emit_push_r64(self : MachineCode, reg : Int) -> Unit

    MachineCode::x86_emit_pxor_xmm_xmm

    fn MachineCode::x86_emit_pxor_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_ret

    fn MachineCode::x86_emit_ret(self : MachineCode) -> Unit

    MachineCode::x86_emit_ror_r32_cl

    fn MachineCode::x86_emit_ror_r32_cl(self : MachineCode, dst : Int) -> Unit

    MachineCode::x86_emit_ror_r32_imm8

    fn MachineCode::x86_emit_ror_r32_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_ror_r_cl

    fn MachineCode::x86_emit_ror_r_cl(self : MachineCode, dst : Int) -> Unit

    MachineCode::x86_emit_ror_r_imm8

    fn MachineCode::x86_emit_ror_r_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_roundpd_xmm_xmm_imm8

    fn MachineCode::x86_emit_roundpd_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_roundps_xmm_xmm_imm8

    fn MachineCode::x86_emit_roundps_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_roundsd_xmm_xmm_imm8

    fn MachineCode::x86_emit_roundsd_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_roundss_xmm_xmm_imm8

    fn MachineCode::x86_emit_roundss_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_sar_r32_cl

    fn MachineCode::x86_emit_sar_r32_cl(self : MachineCode, dst : Int) -> Unit

    MachineCode::x86_emit_sar_r32_imm8

    fn MachineCode::x86_emit_sar_r32_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_sar_r_cl

    fn MachineCode::x86_emit_sar_r_cl(self : MachineCode, dst : Int) -> Unit

    MachineCode::x86_emit_sar_r_imm8

    fn MachineCode::x86_emit_sar_r_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_setcc_r8

    fn MachineCode::x86_emit_setcc_r8(self : MachineCode, cond :
    Cond
    , dst : Int) -> Unit

    MachineCode::x86_emit_shl_r32_cl

    fn MachineCode::x86_emit_shl_r32_cl(self : MachineCode, dst : Int) -> Unit

    MachineCode::x86_emit_shl_r32_imm8

    fn MachineCode::x86_emit_shl_r32_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_shl_r_cl

    fn MachineCode::x86_emit_shl_r_cl(self : MachineCode, dst : Int) -> Unit

    MachineCode::x86_emit_shl_r_imm8

    fn MachineCode::x86_emit_shl_r_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_shld_r32_imm8

    fn MachineCode::x86_emit_shld_r32_imm8(self : MachineCode, dst : Int, src : Int, imm : Int) -> Unit

    MachineCode::x86_emit_shld_r_imm8

    fn MachineCode::x86_emit_shld_r_imm8(self : MachineCode, dst : Int, src : Int, imm : Int) -> Unit

    MachineCode::x86_emit_shr_r32_cl

    fn MachineCode::x86_emit_shr_r32_cl(self : MachineCode, dst : Int) -> Unit

    MachineCode::x86_emit_shr_r32_imm8

    fn MachineCode::x86_emit_shr_r32_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_shr_r_cl

    fn MachineCode::x86_emit_shr_r_cl(self : MachineCode, dst : Int) -> Unit

    MachineCode::x86_emit_shr_r_imm8

    fn MachineCode::x86_emit_shr_r_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_shrd_r32_imm8

    fn MachineCode::x86_emit_shrd_r32_imm8(self : MachineCode, dst : Int, src : Int, imm : Int) -> Unit

    MachineCode::x86_emit_shrd_r_imm8

    fn MachineCode::x86_emit_shrd_r_imm8(self : MachineCode, dst : Int, src : Int, imm : Int) -> Unit

    MachineCode::x86_emit_shufpd_xmm_xmm_imm8

    fn MachineCode::x86_emit_shufpd_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_shufps_xmm_xmm_imm8

    fn MachineCode::x86_emit_shufps_xmm_xmm_imm8(self : MachineCode, dst_xmm : Int, src_xmm : Int, imm8 : Int) -> Unit

    MachineCode::x86_emit_sqrtpd_xmm_xmm

    fn MachineCode::x86_emit_sqrtpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_sqrtps_xmm_xmm

    fn MachineCode::x86_emit_sqrtps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_sqrtsd_xmm_xmm

    fn MachineCode::x86_emit_sqrtsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_sqrtss_xmm_xmm

    fn MachineCode::x86_emit_sqrtss_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_sub_r32_imm32

    fn MachineCode::x86_emit_sub_r32_imm32(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_sub_r32_imm8

    fn MachineCode::x86_emit_sub_r32_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_sub_r_imm32

    fn MachineCode::x86_emit_sub_r_imm32(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_sub_r_imm8

    fn MachineCode::x86_emit_sub_r_imm8(self : MachineCode, dst : Int, imm : Int) -> Unit

    MachineCode::x86_emit_sub_rr

    fn MachineCode::x86_emit_sub_rr(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_sub_rr32

    fn MachineCode::x86_emit_sub_rr32(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_sub_rsp_imm32

    fn MachineCode::x86_emit_sub_rsp_imm32(self : MachineCode, imm : Int) -> Unit

    MachineCode::x86_emit_subpd_xmm_xmm

    fn MachineCode::x86_emit_subpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_subps_xmm_xmm

    fn MachineCode::x86_emit_subps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_subsd_xmm_xmm

    fn MachineCode::x86_emit_subsd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_subss_xmm_xmm

    fn MachineCode::x86_emit_subss_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_test_rr

    fn MachineCode::x86_emit_test_rr(self : MachineCode, lhs : Int, rhs : Int) -> Unit

    MachineCode::x86_emit_test_rr32

    fn MachineCode::x86_emit_test_rr32(self : MachineCode, lhs : Int, rhs : Int) -> Unit

    MachineCode::x86_emit_trap_imm16

    fn MachineCode::x86_emit_trap_imm16(self : MachineCode, imm16 : Int) -> Unit

    Emit a trap instruction with a 16-bit payload.

    Encoding: INT3 (0xCC) followed by imm16 (little-endian). The embedding trap handler owns the payload policy.

    MachineCode::x86_emit_ucomisd_xmm_xmm

    fn MachineCode::x86_emit_ucomisd_xmm_xmm(self : MachineCode, lhs_xmm : Int, rhs_xmm : Int) -> Unit

    MachineCode::x86_emit_ucomiss_xmm_xmm

    fn MachineCode::x86_emit_ucomiss_xmm_xmm(self : MachineCode, lhs_xmm : Int, rhs_xmm : Int) -> Unit

    MachineCode::x86_emit_unpcklps_xmm_xmm

    fn MachineCode::x86_emit_unpcklps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_xor_rr

    fn MachineCode::x86_emit_xor_rr(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_xor_rr32

    fn MachineCode::x86_emit_xor_rr32(self : MachineCode, dst : Int, src : Int) -> Unit

    MachineCode::x86_emit_xorpd_xmm_xmm

    fn MachineCode::x86_emit_xorpd_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    MachineCode::x86_emit_xorps_xmm_xmm

    fn MachineCode::x86_emit_xorps_xmm_xmm(self : MachineCode, dst_xmm : Int, src_xmm : Int) -> Unit

    StackAdjustStep

    pub(all) struct StackAdjustStep {
    amount : Int
    probe_after : Bool
    } derive(Eq,
    Debug
    )

    X86Rel32Fixup

    type X86Rel32Fixup

    x86_64 rel32 fixup for forward branches (jmp/jcc rel32).

    disp_offset is the start of the 4-byte displacement field. next_ip_offset is the offset of the instruction end (RIP after the branch).

    emit_function

    fn emit_function(func :
    Function
    , isa? :
    ISA
    , debug_func_idx? : Int?, force_frame_setup? : Bool, embedding_abi? :
    EmbeddingABI
    ?, record_disasm? : Bool) -> MachineCode

    Emit machine code for a MachV function

    emit_function_with_regalloc

    fn emit_function_with_regalloc(func :
    Function
    , output :
    Output
    , isa? :
    ISA
    , debug_func_idx? : Int?, force_frame_setup? : Bool, embedding_abi? :
    EmbeddingABI
    ?, record_disasm? : Bool) -> MachineCode

    Emit machine code using the Cranelift-style regalloc output.

    fits_signed_i32

    fn fits_signed_i32(value : Int) -> Bool

    fits_signed_i8

    fn fits_signed_i8(value : Int) -> Bool

    format_disassembly

    fn format_disassembly(code : Array[Int], label_offsets : Array[(Int, Int)], annotations : Array[(Int, String)]) -> String

    plan_signed_i8_chunks

    fn plan_signed_i8_chunks(value : Int) -> Array[Int]

    plan_stack_pointer_adjustment

    fn plan_stack_pointer_adjustment(amount : Int, page_size? : Int) -> Array[StackAdjustStep]