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
29#include "abi_x64_common.h"
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_mem_ymm(code_buffer * buf, x64_gpr dest_base, int32_t offset, x64_xmm src);
102
103// GPR <-> XMM Move Emitters
105void emit_movq_xmm_gpr(code_buffer * buf, x64_xmm dest, x64_gpr src);
106
108void emit_movq_gpr_xmm(code_buffer * buf, x64_gpr dest, x64_xmm src);
109
110// Memory <-> x87 FPU Emitters
112void emit_fldt_mem(code_buffer * buf, x64_gpr base, int32_t offset);
113
115void emit_fstpt_mem(code_buffer * buf, x64_gpr base, int32_t offset);
116
117// Arithmetic & Logic Emitters
119void emit_lea_reg_mem(code_buffer * buf, x64_gpr dest, x64_gpr src_base, int32_t offset);
120
122void emit_add_reg_imm8(code_buffer * buf, x64_gpr reg, int8_t imm); // Unused
123
125void emit_add_reg_imm32(code_buffer * buf, x64_gpr reg, int32_t imm);
126
128void emit_sub_reg_imm32(code_buffer * buf, x64_gpr reg, int32_t imm);
129
131void emit_dec_reg(code_buffer * buf, x64_gpr reg);
132
133// Stack & Control Flow Emitters
135void emit_push_reg(code_buffer * buf, x64_gpr reg);
136
138void emit_pop_reg(code_buffer * buf, x64_gpr reg);
139
141void emit_call_reg(code_buffer * buf, x64_gpr reg);
142
144void emit_ret(code_buffer * buf);
145
147void emit_test_reg_reg(code_buffer * buf, x64_gpr reg1, x64_gpr reg2);
148
150void emit_jnz_short(code_buffer * buf, int8_t offset);
151
153void emit_jmp_reg(code_buffer * buf, x64_gpr reg);
154
156void emit_ud2(code_buffer * buf);
157
158// Stack Operation Emitters
160void emit_pop_reg(code_buffer * buf, x64_gpr reg);
161
162// Instruction Encoding Helpers
164void emit_modrm(code_buffer * buf, uint8_t mod, uint8_t reg_opcode, uint8_t rm);
165
167void emit_rex_prefix(code_buffer * buf, bool w, bool r, bool x, bool b);
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:294
void emit_mov_mem_reg8(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:368
void emit_push_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:772
void emit_ret(code_buffer *buf)
Definition abi_x64_emitters.c:815
void emit_fldt_mem(code_buffer *buf, x64_gpr base, int32_t offset)
Definition abi_x64_emitters.c:653
void emit_movsd_mem_xmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:481
void emit_movups_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:508
void emit_mov_mem_reg16(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:341
void emit_jnz_short(code_buffer *buf, int8_t offset)
Definition abi_x64_emitters.c:833
void emit_mov_reg_imm64(code_buffer *buf, x64_gpr reg, uint64_t value)
Definition abi_x64_emitters.c:81
void emit_movzx_reg64_mem16(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:272
void emit_mov_reg_reg(code_buffer *buf, x64_gpr dest, x64_gpr src)
Definition abi_x64_emitters.c:112
void emit_mov_reg_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:132
void emit_movsd_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:454
void emit_movsx_reg64_mem8(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:212
void emit_vmovupd_mem_ymm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:604
void emit_sub_reg_imm32(code_buffer *buf, x64_gpr reg, int32_t imm)
Definition abi_x64_emitters.c:734
void emit_movsxd_reg_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:192
void emit_dec_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:761
void emit_add_reg_imm8(code_buffer *buf, x64_gpr reg, int8_t imm)
Definition abi_x64_emitters.c:748
void emit_jmp_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:843
void emit_fstpt_mem(code_buffer *buf, x64_gpr base, int32_t offset)
Definition abi_x64_emitters.c:678
void emit_rex_prefix(code_buffer *buf, bool w, bool r, bool x, bool b)
Definition abi_x64_emitters.c:48
void emit_mov_reg_imm32(code_buffer *buf, x64_gpr reg, int32_t imm)
Definition abi_x64_emitters.c:96
void emit_call_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:798
void emit_movss_mem_xmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:426
void emit_ud2(code_buffer *buf)
Definition abi_x64_emitters.c:857
void emit_vmovupd_ymm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:583
void emit_add_reg_imm32(code_buffer *buf, x64_gpr reg, int32_t imm)
Definition abi_x64_emitters.c:723
void emit_pop_reg(code_buffer *buf, x64_gpr reg)
Definition abi_x64_emitters.c:785
void emit_test_reg_reg(code_buffer *buf, x64_gpr reg1, x64_gpr reg2)
Definition abi_x64_emitters.c:823
void emit_movss_xmm_mem(code_buffer *buf, x64_xmm dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:399
void emit_mov_mem_reg32(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_gpr src)
Definition abi_x64_emitters.c:314
void emit_mov_reg32_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:161
void emit_movups_mem_xmm(code_buffer *buf, x64_gpr dest_base, int32_t offset, x64_xmm src)
Definition abi_x64_emitters.c:534
void emit_movq_gpr_xmm(code_buffer *buf, x64_gpr dest, x64_xmm src)
Definition abi_x64_emitters.c:639
void emit_movsx_reg64_mem16(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:232
void emit_movq_xmm_gpr(code_buffer *buf, x64_xmm dest, x64_gpr src)
Definition abi_x64_emitters.c:626
void emit_movzx_reg64_mem8(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:252
void emit_modrm(code_buffer *buf, uint8_t mod, uint8_t reg_opcode, uint8_t rm)
Definition abi_x64_emitters.c:66
void emit_lea_reg_mem(code_buffer *buf, x64_gpr dest, x64_gpr src_base, int32_t offset)
Definition abi_x64_emitters.c:704
Declarations for internal-only functions, types, and constants.
Definition infix_internals.h:169