infix
A JIT-Powered FFI Library for C
Loading...
Searching...
No Matches
abi_arm64_emitters.h
Go to the documentation of this file.
1#pragma once
15#pragma once
34
35// GPR <-> Immediate Value Emitters
37void emit_arm64_load_u64_immediate(code_buffer * buf, arm64_gpr dest, uint64_t value);
38
39
40// GPR <-> GPR Move Emitters
42void emit_arm64_mov_reg(code_buffer * buf, bool is64, arm64_gpr dest, arm64_gpr src);
43
44
45// Memory <-> GPR Load/Store Emitters
47void emit_arm64_ldr_imm(code_buffer * buf, bool is64, arm64_gpr dest, arm64_gpr base, int32_t offset);
48
50void emit_arm64_ldrsw_imm(code_buffer * buf, arm64_gpr dest, arm64_gpr base, int32_t offset);
51
53void emit_arm64_str_imm(code_buffer * buf, bool is64, arm64_gpr src, arm64_gpr base, int32_t offset);
54
56void emit_arm64_strb_imm(code_buffer * buf, arm64_gpr src, arm64_gpr base, int32_t offset);
57
59void emit_arm64_strh_imm(code_buffer * buf, arm64_gpr src, arm64_gpr base, int32_t offset);
60
63 code_buffer * buf, bool is64, arm64_gpr src1, arm64_gpr src2, arm64_gpr base, int32_t offset);
64
67 code_buffer * buf, bool is64, arm64_gpr dest1, arm64_gpr dest2, arm64_gpr base, int32_t offset);
68
69// Memory <-> VPR (SIMD/FP) Emitters
71void emit_arm64_ldr_vpr(code_buffer * buf, bool is64, arm64_vpr dest, arm64_gpr base, int32_t offset);
72
74void emit_arm64_str_vpr(code_buffer * buf, bool is64, arm64_vpr src, arm64_gpr base, int32_t offset);
75
77void emit_arm64_ldr_q_imm(code_buffer * buf, arm64_vpr dest, arm64_gpr base, int32_t offset);
78
80void emit_arm64_str_q_imm(code_buffer * buf, arm64_vpr src, arm64_gpr base, int32_t offset);
81
82// Arithmetic Emitters
84void emit_arm64_add_imm(code_buffer * buf, bool is64, bool set_flags, arm64_gpr dest, arm64_gpr base, uint32_t imm);
85
87void emit_arm64_sub_imm(code_buffer * buf, bool is64, bool set_flags, arm64_gpr dest, arm64_gpr base, uint32_t imm);
88
89// Control Flow Emitters
92
94void emit_arm64_ret(code_buffer * buf, arm64_gpr reg);
95
97void emit_arm64_cbnz(code_buffer * buf, bool is64, arm64_gpr reg, int32_t offset);
98
100void emit_arm64_brk(code_buffer * buf, uint16_t imm);
101
103void emit_arm64_b_reg(code_buffer * buf, arm64_gpr reg);
104
106void emit_arm64_brk(code_buffer * buf, uint16_t imm);
107
109void emit_arm64_b_reg(code_buffer * buf, arm64_gpr reg);
110
118void emit_arm64_svc_imm(code_buffer * buf, uint16_t imm);
Common register definitions and instruction encodings for the AArch64 (ARM64) architecture.
arm64_gpr
Definition abi_arm64_common.h:53
arm64_vpr
Definition abi_arm64_common.h:97
void emit_arm64_blr_reg(code_buffer *buf, arm64_gpr reg)
Definition abi_arm64_emitters.c:484
void emit_arm64_cbnz(code_buffer *buf, bool is64, arm64_gpr reg, int32_t offset)
Definition abi_arm64_emitters.c:510
void emit_arm64_ldr_imm(code_buffer *buf, bool is64, arm64_gpr dest, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:152
void emit_arm64_add_imm(code_buffer *buf, bool is64, bool set_flags, arm64_gpr dest, arm64_gpr base, uint32_t imm)
Definition abi_arm64_emitters.c:463
void emit_arm64_ldp_post_index(code_buffer *buf, bool is64, arm64_gpr dest1, arm64_gpr dest2, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:310
void emit_arm64_ret(code_buffer *buf, arm64_gpr reg)
Definition abi_arm64_emitters.c:495
void emit_arm64_sub_imm(code_buffer *buf, bool is64, bool set_flags, arm64_gpr dest, arm64_gpr base, uint32_t imm)
Definition abi_arm64_emitters.c:472
void emit_arm64_str_q_imm(code_buffer *buf, arm64_vpr src, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:398
void emit_arm64_str_imm(code_buffer *buf, bool is64, arm64_gpr src, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:209
void emit_arm64_mov_reg(code_buffer *buf, bool is64, arm64_gpr dest, arm64_gpr src)
Definition abi_arm64_emitters.c:116
void emit_arm64_str_vpr(code_buffer *buf, bool is64, arm64_vpr src, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:355
void emit_arm64_ldr_q_imm(code_buffer *buf, arm64_vpr dest, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:378
void emit_arm64_ldrsw_imm(code_buffer *buf, arm64_gpr dest, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:181
void emit_arm64_ldr_vpr(code_buffer *buf, bool is64, arm64_vpr dest, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:331
void emit_arm64_load_u64_immediate(code_buffer *buf, arm64_gpr dest, uint64_t value)
Definition abi_arm64_emitters.c:84
void emit_arm64_strb_imm(code_buffer *buf, arm64_gpr src, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:238
void emit_arm64_svc_imm(code_buffer *buf, uint16_t imm)
Definition abi_arm64_emitters.c:565
void emit_arm64_strh_imm(code_buffer *buf, arm64_gpr src, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:261
void emit_arm64_brk(code_buffer *buf, uint16_t imm)
Definition abi_arm64_emitters.c:533
void emit_arm64_b_reg(code_buffer *buf, arm64_gpr reg)
Definition abi_arm64_emitters.c:552
void emit_arm64_stp_pre_index(code_buffer *buf, bool is64, arm64_gpr src1, arm64_gpr src2, arm64_gpr base, int32_t offset)
Definition abi_arm64_emitters.c:285
Internal data structures, function prototypes, and constants.
A dynamic buffer for staged machine code generation.
Definition infix_internals.h:204