infix
A JIT-Powered FFI Library for C
Loading...
Searching...
No Matches
abi_x64_emitters.h File Reference

Declares internal helper functions for emitting x86-64 machine code. More...

Include dependency graph for abi_x64_emitters.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void emit_mov_reg_imm64 (code_buffer *buf, x64_gpr reg, uint64_t value)
 
void emit_mov_reg_imm32 (code_buffer *buf, x64_gpr reg, int32_t imm)
 
void emit_mov_reg_reg (code_buffer *buf, x64_gpr dest, x64_gpr src)
 
void emit_mov_reg_mem (code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
 
void emit_mov_reg32_mem (code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
 
void emit_movsxd_reg_mem (code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
 
void emit_movsx_reg64_mem8 (code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
 
void emit_movsx_reg64_mem16 (code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
 
void emit_movzx_reg64_mem8 (code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
 
void emit_movzx_reg64_mem16 (code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
 
void emit_mov_mem_reg (code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
 
void emit_mov_mem_reg32 (code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
 
void emit_mov_mem_reg16 (code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
 
void emit_mov_mem_reg8 (code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
 
void emit_movss_xmm_mem (code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
 
void emit_movss_mem_xmm (code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
 
void emit_movsd_xmm_mem (code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
 
void emit_movsd_mem_xmm (code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
 
void emit_movups_xmm_mem (code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
 
void emit_movups_mem_xmm (code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
 
void emit_vmovupd_ymm_mem (code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
 
void emit_vmovupd_mem_ymm (code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
 
void emit_movq_xmm_gpr (code_buffer *buf, x64_xmm dest, x64_gpr src)
 
void emit_movq_gpr_xmm (code_buffer *buf, x64_gpr dest, x64_xmm src)
 
void emit_fldt_mem (code_buffer *buf, x64_gpr base, int32_t offset)
 
void emit_fstpt_mem (code_buffer *buf, x64_gpr base, int32_t offset)
 
void emit_lea_reg_mem (code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
 
void emit_add_reg_imm8 (code_buffer *buf, x64_gpr reg, int8_t imm)
 
void emit_add_reg_imm32 (code_buffer *buf, x64_gpr reg, int32_t imm)
 
void emit_sub_reg_imm32 (code_buffer *buf, x64_gpr reg, int32_t imm)
 
void emit_dec_reg (code_buffer *buf, x64_gpr reg)
 
void emit_push_reg (code_buffer *buf, x64_gpr reg)
 
void emit_pop_reg (code_buffer *buf, x64_gpr reg)
 
void emit_call_reg (code_buffer *buf, x64_gpr reg)
 
void emit_ret (code_buffer *buf)
 
void emit_test_reg_reg (code_buffer *buf, x64_gpr reg1, x64_gpr reg2)
 
void emit_jnz_short (code_buffer *buf, int8_t offset)
 
void emit_jmp_reg (code_buffer *buf, x64_gpr reg)
 
void emit_ud2 (code_buffer *buf)
 
void emit_modrm (code_buffer *buf, uint8_t mod, uint8_t reg_opcode, uint8_t rm)
 
void emit_rex_prefix (code_buffer *buf, bool w, bool r, bool x, bool b)
 

Detailed Description

Declares internal helper functions for emitting x86-64 machine code.

Copyright (c) 2025 Sanko Robinson

This source code is dual-licensed under the Artistic License 2.0 or the MIT License. You may choose to use this code under the terms of either license.

SPDX-License-Identifier: (Artistic-2.0 OR MIT)

The documentation blocks within this file are licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).

SPDX-License-Identifier: CC-BY-4.0

Function Documentation

◆ emit_add_reg_imm32()

void emit_add_reg_imm32 ( code_buffer buf,
x64_gpr  reg,
int32_t  imm 
)

◆ emit_add_reg_imm8()

void emit_add_reg_imm8 ( code_buffer buf,
x64_gpr  reg,
int8_t  imm 
)

◆ emit_call_reg()

void emit_call_reg ( code_buffer buf,
x64_gpr  reg 
)

◆ emit_dec_reg()

void emit_dec_reg ( code_buffer buf,
x64_gpr  reg 
)

◆ emit_fldt_mem()

void emit_fldt_mem ( code_buffer buf,
x64_gpr  base,
int32_t  offset 
)

◆ emit_fstpt_mem()

void emit_fstpt_mem ( code_buffer buf,
x64_gpr  base,
int32_t  offset 
)

◆ emit_jmp_reg()

void emit_jmp_reg ( code_buffer buf,
x64_gpr  reg 
)

Emits a jmp r64 instruction. This instruction performs an indirect jump to the address contained in the specified 64-bit register. Opcode format: [REX.B] FF /4

◆ emit_jnz_short()

void emit_jnz_short ( code_buffer buf,
int8_t  offset 
)

◆ emit_lea_reg_mem()

void emit_lea_reg_mem ( code_buffer buf,
x64_gpr  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_modrm()

void emit_modrm ( code_buffer buf,
uint8_t  mod,
uint8_t  reg_opcode,
uint8_t  rm 
)

◆ emit_mov_mem_reg()

void emit_mov_mem_reg ( code_buffer buf,
x64_gpr  dest_base,
int32_t  offset,
x64_gpr  src 
)

◆ emit_mov_mem_reg16()

void emit_mov_mem_reg16 ( code_buffer buf,
x64_gpr  dest_base,
int32_t  offset,
x64_gpr  src 
)

◆ emit_mov_mem_reg32()

void emit_mov_mem_reg32 ( code_buffer buf,
x64_gpr  dest_base,
int32_t  offset,
x64_gpr  src 
)

◆ emit_mov_mem_reg8()

void emit_mov_mem_reg8 ( code_buffer buf,
x64_gpr  dest_base,
int32_t  offset,
x64_gpr  src 
)

◆ emit_mov_reg32_mem()

void emit_mov_reg32_mem ( code_buffer buf,
x64_gpr  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_mov_reg_imm32()

void emit_mov_reg_imm32 ( code_buffer buf,
x64_gpr  reg,
int32_t  imm 
)

◆ emit_mov_reg_imm64()

void emit_mov_reg_imm64 ( code_buffer buf,
x64_gpr  reg,
uint64_t  value 
)

◆ emit_mov_reg_mem()

void emit_mov_reg_mem ( code_buffer buf,
x64_gpr  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_mov_reg_reg()

void emit_mov_reg_reg ( code_buffer buf,
x64_gpr  dest,
x64_gpr  src 
)

◆ emit_movq_gpr_xmm()

void emit_movq_gpr_xmm ( code_buffer buf,
x64_gpr  dest,
x64_xmm  src 
)

◆ emit_movq_xmm_gpr()

void emit_movq_xmm_gpr ( code_buffer buf,
x64_xmm  dest,
x64_gpr  src 
)

◆ emit_movsd_mem_xmm()

void emit_movsd_mem_xmm ( code_buffer buf,
x64_gpr  dest_base,
int32_t  offset,
x64_xmm  src 
)

◆ emit_movsd_xmm_mem()

void emit_movsd_xmm_mem ( code_buffer buf,
x64_xmm  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_movss_mem_xmm()

void emit_movss_mem_xmm ( code_buffer buf,
x64_gpr  dest_base,
int32_t  offset,
x64_xmm  src 
)

◆ emit_movss_xmm_mem()

void emit_movss_xmm_mem ( code_buffer buf,
x64_xmm  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_movsx_reg64_mem16()

void emit_movsx_reg64_mem16 ( code_buffer buf,
x64_gpr  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_movsx_reg64_mem8()

void emit_movsx_reg64_mem8 ( code_buffer buf,
x64_gpr  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_movsxd_reg_mem()

void emit_movsxd_reg_mem ( code_buffer buf,
x64_gpr  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_movups_mem_xmm()

void emit_movups_mem_xmm ( code_buffer buf,
x64_gpr  dest_base,
int32_t  offset,
x64_xmm  src 
)

◆ emit_movups_xmm_mem()

void emit_movups_xmm_mem ( code_buffer buf,
x64_xmm  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_movzx_reg64_mem16()

void emit_movzx_reg64_mem16 ( code_buffer buf,
x64_gpr  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_movzx_reg64_mem8()

void emit_movzx_reg64_mem8 ( code_buffer buf,
x64_gpr  dest,
x64_gpr  src_base,
int32_t  offset 
)

◆ emit_pop_reg()

void emit_pop_reg ( code_buffer buf,
x64_gpr  reg 
)

◆ emit_push_reg()

void emit_push_reg ( code_buffer buf,
x64_gpr  reg 
)

◆ emit_ret()

void emit_ret ( code_buffer buf)

◆ emit_rex_prefix()

void emit_rex_prefix ( code_buffer buf,
bool  w,
bool  r,
bool  x,
bool  b 
)

◆ emit_sub_reg_imm32()

void emit_sub_reg_imm32 ( code_buffer buf,
x64_gpr  reg,
int32_t  imm 
)

◆ emit_test_reg_reg()

void emit_test_reg_reg ( code_buffer buf,
x64_gpr  reg1,
x64_gpr  reg2 
)

◆ emit_ud2()

void emit_ud2 ( code_buffer buf)

◆ emit_vmovupd_mem_ymm()

void emit_vmovupd_mem_ymm ( code_buffer buf,
x64_gpr  dest_base,
int32_t  offset,
x64_xmm  src 
)

◆ emit_vmovupd_ymm_mem()

void emit_vmovupd_ymm_mem ( code_buffer buf,
x64_xmm  dest,
x64_gpr  src_base,
int32_t  offset 
)