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
31
32// GPR <-> Immediate Value Emitters
34void emit_mov_reg_imm64(code_buffer * buf, x64_gpr reg, uint64_t value);
35
37void emit_mov_reg_imm32(code_buffer * buf, x64_gpr reg, int32_t imm);
38
39// GPR <-> GPR Move Emitters
41void emit_mov_reg_reg(code_buffer * buf, x64_gpr dest, x64_gpr src);
42
43// Memory -> GPR Load Emitters
45void emit_mov_reg_mem(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
46
48void emit_mov_reg32_mem(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
49
51void emit_movsxd_reg_mem(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
52
54void emit_movsx_reg64_mem8(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
55
57void emit_movsx_reg64_mem16(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
58
60void emit_movzx_reg64_mem8(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
61
63void emit_movzx_reg64_mem16(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
64
65// GPR -> Memory Store Emitters
67void emit_mov_mem_reg(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_gpr src);
68
70void emit_mov_mem_reg32(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_gpr src);
71
73void emit_mov_mem_reg16(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_gpr src);
74
76void emit_mov_mem_reg8(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_gpr src);
77
78// Memory <-> XMM/YMM (SSE/AVX) Emitters
80void emit_movss_xmm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
81
83void emit_movss_mem_xmm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
84
86void emit_movsd_xmm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
87
89void emit_movsd_mem_xmm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
90
92void emit_movups_xmm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
93
95void emit_movups_mem_xmm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
96
98void emit_vmovupd_ymm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
99
101void emit_vmovupd_zmm_mem(code_buffer * buf, x64_xmm dest, x64_gpr src_base, int32_t offset);
102
104void emit_vmovupd_mem_zmm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
105
107void emit_vmovupd_mem_ymm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
108
109// GPR <-> XMM Move Emitters
111void emit_movq_xmm_gpr(code_buffer * buf, x64_xmm dest, x64_gpr src);
112
114void emit_movq_gpr_xmm(code_buffer * buf, x64_gpr dest, x64_xmm src);
115
116// Memory <-> x87 FPU Emitters
118void emit_fldt_mem(code_buffer * buf, x64_gpr base, int32_t offset);
119
121void emit_fstpt_mem(code_buffer * buf, x64_gpr base, int32_t offset);
122
123// Arithmetic & Logic Emitters
125void emit_lea_reg_mem(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
126
128void emit_add_reg_imm8(code_buffer * buf, x64_gpr reg, int8_t imm); // Unused
129
131void emit_add_reg_imm32(code_buffer * buf, x64_gpr reg, int32_t imm);
132
134void emit_sub_reg_imm32(code_buffer * buf, x64_gpr reg, int32_t imm);
135
137void emit_dec_reg(code_buffer * buf, x64_gpr reg);
138
139// Stack & Control Flow Emitters
141void emit_push_reg(code_buffer * buf, x64_gpr reg);
142
144void emit_pop_reg(code_buffer * buf, x64_gpr reg);
145
147void emit_call_reg(code_buffer * buf, x64_gpr reg);
148
150void emit_ret(code_buffer * buf);
151
153void emit_test_reg_reg(code_buffer * buf, x64_gpr reg1, x64_gpr reg2);
154
156void emit_jnz_short(code_buffer * buf, int8_t offset);
157
159void emit_jmp_reg(code_buffer * buf, x64_gpr reg);
160
162void emit_ud2(code_buffer * buf);
163
164// Stack Operation Emitters
166void emit_pop_reg(code_buffer * buf, x64_gpr reg);
167
168// Instruction Encoding Helpers
170void emit_modrm(code_buffer * buf, uint8_t mod, uint8_t reg_opcode, uint8_t rm);
171
173void emit_rex_prefix(code_buffer * buf, bool w, bool r, bool x, bool b);
174
181void emit_syscall(code_buffer * buf);
Common register definitions for the x86-64 architecture.
x64_gpr
Definition abi_x64_common.h:45
x64_xmm
Definition abi_x64_common.h:73
void emit_mov_mem_reg(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:271
void emit_mov_mem_reg8(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:344
void emit_vmovupd_zmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:649
void emit_push_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:863
void emit_ret(code_buffer *buf)
Definition abi_x64_emitters.c:909
void emit_fldt_mem(code_buffer *buf, x64_gpr base, int32_t offset)
Definition abi_x64_emitters.c:746
void emit_movsd_mem_xmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:454
void emit_movups_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:481
void emit_mov_mem_reg16(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:317
void emit_jnz_short(code_buffer *buf, int8_t offset)
Definition abi_x64_emitters.c:927
void emit_mov_reg_imm64(code_buffer *buf, x64_gpr reg, uint64_t value)
Definition abi_x64_emitters.c:80
void emit_movzx_reg64_mem16(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:250
void emit_mov_reg_reg(code_buffer *buf, x64_gpr dest, x64_gpr src)
Definition abi_x64_emitters.c:106
void emit_mov_reg_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:124
void emit_movsd_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:427
void emit_movsx_reg64_mem8(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:190
void emit_vmovupd_mem_ymm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:629
void emit_sub_reg_imm32(code_buffer *buf, x64_gpr reg, int32_t imm)
Definition abi_x64_emitters.c:827
void emit_movsxd_reg_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:170
void emit_vmovupd_mem_zmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:685
void emit_dec_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:851
void emit_add_reg_imm8(code_buffer *buf, x64_gpr reg, int8_t imm)
Definition abi_x64_emitters.c:839
void emit_jmp_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:935
void emit_fstpt_mem(code_buffer *buf, x64_gpr base, int32_t offset)
Definition abi_x64_emitters.c:770
void emit_rex_prefix(code_buffer *buf, bool w, bool r, bool x, bool b)
Definition abi_x64_emitters.c:49
void emit_mov_reg_imm32(code_buffer *buf, x64_gpr reg, int32_t imm)
Definition abi_x64_emitters.c:92
void emit_call_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:891
void emit_movss_mem_xmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:400
void emit_ud2(code_buffer *buf)
Definition abi_x64_emitters.c:950
void emit_vmovupd_ymm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:607
void emit_add_reg_imm32(code_buffer *buf, x64_gpr reg, int32_t imm)
Definition abi_x64_emitters.c:815
void emit_pop_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:877
void emit_test_reg_reg(code_buffer *buf, x64_gpr reg1, x64_gpr reg2)
Definition abi_x64_emitters.c:916
void emit_movss_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:373
void emit_mov_mem_reg32(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:291
void emit_mov_reg32_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:144
void emit_movups_mem_xmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:507
void emit_syscall(code_buffer *buf)
Definition abi_x64_emitters.c:957
void emit_movq_gpr_xmm(code_buffer *buf, x64_gpr dest, x64_xmm src)
Definition abi_x64_emitters.c:733
void emit_movsx_reg64_mem16(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:210
void emit_movq_xmm_gpr(code_buffer *buf, x64_xmm dest, x64_gpr src)
Definition abi_x64_emitters.c:721
void emit_movzx_reg64_mem8(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:230
void emit_modrm(code_buffer *buf, uint8_t mod, uint8_t reg_opcode, uint8_t rm)
Definition abi_x64_emitters.c:68
void emit_lea_reg_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:795
Internal data structures, function prototypes, and constants.
A dynamic buffer for staged machine code generation.
Definition infix_internals.h:204