infix
A JIT-Powered FFI Library for C
Loading...
Searching...
No Matches
abi_x64_emitters.h
Go to the documentation of this file.
1#pragma once
30
31// GPR <-> Immediate Value Emitters
33void emit_mov_reg_imm64(code_buffer * buf, x64_gpr reg, uint64_t value);
35void emit_mov_reg_imm32(code_buffer * buf, x64_gpr reg, int32_t imm);
36
37// GPR <-> GPR Move Emitters
39void emit_mov_reg_reg(code_buffer * buf, x64_gpr dest, x64_gpr src);
40
41// Memory -> GPR Load Emitters
43void emit_mov_reg_mem(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
45void emit_mov_reg32_mem(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
47void emit_movsxd_reg_mem(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
49void emit_movsx_reg64_mem8(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
51void emit_movsx_reg64_mem16(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
53void emit_movzx_reg64_mem8(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
55void emit_movzx_reg64_mem16(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
56
57// GPR -> Memory Store Emitters
59void emit_mov_mem_reg(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_gpr src);
61void emit_mov_mem_reg32(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_gpr src);
63void emit_mov_mem_reg16(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_gpr src);
65void emit_mov_mem_reg8(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_gpr src);
66
67// Memory <-> XMM/YMM (SSE/AVX) Emitters
69void emit_movss_xmm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
71void emit_movss_mem_xmm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
73void emit_movsd_xmm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
75void emit_movsd_mem_xmm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
77void emit_movups_xmm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
79void emit_movups_mem_xmm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
83void emit_vmovupd_ymm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
85void emit_vmovupd_zmm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
87void emit_vmovupd_mem_zmm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
89void emit_vmovupd_mem_ymm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
93void emit_movaps_xmm_xmm(code_buffer * buf, x64_xmm dest, x64_xmm src);
95void emit_cvtsd2ss_xmm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
96
97// GPR <-> XMM Move Emitters
99void emit_movq_xmm_gpr(code_buffer * buf, x64_xmm dest, x64_gpr src);
101void emit_movq_gpr_xmm(code_buffer * buf, x64_gpr dest, x64_xmm src);
102
103// Memory <-> x87 FPU Emitters
105void emit_fldt_mem(code_buffer * buf, x64_gpr base, int32_t offset);
107void emit_fstpt_mem(code_buffer * buf, x64_gpr base, int32_t offset);
108
109// Arithmetic & Logic Emitters
111void emit_lea_reg_mem(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
113void emit_add_reg_imm8(code_buffer * buf, x64_gpr reg, int8_t imm); // Unused
115void emit_add_reg_imm32(code_buffer * buf, x64_gpr reg, int32_t imm);
117void emit_sub_reg_imm32(code_buffer * buf, x64_gpr reg, int32_t imm);
120
121// Stack & Control Flow Emitters
129void emit_ret(code_buffer * buf);
131void emit_test_reg_reg(code_buffer * buf, x64_gpr reg1, x64_gpr reg2);
133void emit_jnz_short(code_buffer * buf, int8_t offset);
137void emit_ud2(code_buffer * buf);
138
139// Stack Operation Emitters
142// Instruction Encoding Helpers
144void emit_modrm(code_buffer * buf, uint8_t mod, uint8_t reg_opcode, uint8_t rm);
146void emit_rex_prefix(code_buffer * buf, bool w, bool r, bool x, bool b);
148void emit_syscall(code_buffer * buf);
150void emit_leave(code_buffer * buf);
infix_registry_t * reg
Definition 501_direct_marshalling.c:185
Common register definitions for the x86-64 architecture.
x64_gpr
Definition abi_x64_common.h:43
x64_xmm
Definition abi_x64_common.h:70
void emit_mov_mem_reg(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:256
void emit_mov_mem_reg8(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:326
void emit_vmovupd_zmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:621
void emit_push_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:894
void emit_ret(code_buffer *buf)
Definition abi_x64_emitters.c:936
void emit_fldt_mem(code_buffer *buf, x64_gpr base, int32_t offset)
Definition abi_x64_emitters.c:784
void emit_movsd_mem_xmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:432
void emit_movups_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:458
void emit_cvtsd2ss_xmm_xmm(code_buffer *buf, x64_xmm dest, x64_xmm src)
Definition abi_x64_emitters.c:693
void emit_mov_mem_reg16(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:300
void emit_jnz_short(code_buffer *buf, int8_t offset)
Definition abi_x64_emitters.c:952
void emit_mov_reg_imm64(code_buffer *buf, x64_gpr reg, uint64_t value)
Definition abi_x64_emitters.c:75
void emit_movzx_reg64_mem16(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:236
void emit_mov_reg_reg(code_buffer *buf, x64_gpr dest, x64_gpr src)
Definition abi_x64_emitters.c:99
void emit_mov_reg_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:116
void emit_movsd_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:406
void emit_movups_xmm_xmm(code_buffer *buf, x64_xmm dest, x64_xmm src)
void emit_movsx_reg64_mem8(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:179
void emit_vmovupd_mem_ymm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:601
void emit_sub_reg_imm32(code_buffer *buf, x64_gpr reg, int32_t imm)
Definition abi_x64_emitters.c:861
void emit_movsxd_reg_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:160
void emit_vmovupd_mem_zmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:657
void emit_dec_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:883
void emit_movaps_xmm_xmm(code_buffer *buf, x64_xmm dest, x64_xmm src)
Emits movaps xmm1, xmm2/m128 to move 128 bits between XMM registers.
Definition abi_x64_emitters.c:743
void emit_add_reg_imm8(code_buffer *buf, x64_gpr reg, int8_t imm)
Definition abi_x64_emitters.c:872
void emit_jmp_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:959
void emit_leave(code_buffer *buf)
Definition abi_x64_emitters.c:986
void emit_fstpt_mem(code_buffer *buf, x64_gpr base, int32_t offset)
Definition abi_x64_emitters.c:807
void emit_rex_prefix(code_buffer *buf, bool w, bool r, bool x, bool b)
Definition abi_x64_emitters.c:46
void emit_mov_reg_imm32(code_buffer *buf, x64_gpr reg, int32_t imm)
Definition abi_x64_emitters.c:86
void emit_call_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:920
void emit_cvtsd2ss_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:711
void emit_movss_mem_xmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:380
void emit_ud2(code_buffer *buf)
Definition abi_x64_emitters.c:973
void emit_vmovupd_ymm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:579
void emit_add_reg_imm32(code_buffer *buf, x64_gpr reg, int32_t imm)
Definition abi_x64_emitters.c:850
void emit_pop_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:907
void emit_test_reg_reg(code_buffer *buf, x64_gpr reg1, x64_gpr reg2)
Definition abi_x64_emitters.c:942
void emit_movss_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:354
void emit_mov_mem_reg32(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:275
void emit_mov_reg32_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:135
void emit_movups_mem_xmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:483
void emit_syscall(code_buffer *buf)
Definition abi_x64_emitters.c:979
void emit_movq_gpr_xmm(code_buffer *buf, x64_gpr dest, x64_xmm src)
Definition abi_x64_emitters.c:772
void emit_movsx_reg64_mem16(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:198
void emit_movq_xmm_gpr(code_buffer *buf, x64_xmm dest, x64_gpr src)
Definition abi_x64_emitters.c:761
void emit_movzx_reg64_mem8(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:217
void emit_modrm(code_buffer *buf, uint8_t mod, uint8_t reg_opcode, uint8_t rm)
Definition abi_x64_emitters.c:64
void emit_lea_reg_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:831
Internal data structures, function prototypes, and constants.
A dynamic buffer for staged machine code generation.
Definition infix_internals.h:192