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

Implements internal helper functions for emitting AArch64 machine code. More...

#include "abi_arm64_emitters.h"
#include "common/utility.h"
#include <assert.h>
#include <stdio.h>
#include <string.h>
Include dependency graph for abi_arm64_emitters.c:

Functions

static void emit_arm64_mov_imm_chunk (code_buffer *buf, bool is_movz, uint64_t dest_reg, uint16_t imm, uint8_t shift_count)
 
void emit_arm64_load_u64_immediate (code_buffer *buf, arm64_gpr dest, uint64_t value)
 
void emit_arm64_mov_reg (code_buffer *buf, bool is64, arm64_gpr dest, arm64_gpr src)
 
void emit_arm64_ldr_imm (code_buffer *buf, bool is64, arm64_gpr dest, arm64_gpr base, int32_t offset)
 
void emit_arm64_ldrsw_imm (code_buffer *buf, arm64_gpr dest, arm64_gpr base, int32_t offset)
 
void emit_arm64_str_imm (code_buffer *buf, bool is64, arm64_gpr src, arm64_gpr base, int32_t offset)
 
void emit_arm64_strb_imm (code_buffer *buf, arm64_gpr src, arm64_gpr base, int32_t offset)
 
void emit_arm64_strh_imm (code_buffer *buf, arm64_gpr src, arm64_gpr base, int32_t offset)
 
void emit_arm64_stp_pre_index (code_buffer *buf, bool is64, arm64_gpr src1, arm64_gpr src2, arm64_gpr base, int32_t offset)
 
void emit_arm64_ldp_post_index (code_buffer *buf, bool is64, arm64_gpr dest1, arm64_gpr dest2, arm64_gpr base, int32_t offset)
 
void emit_arm64_ldr_vpr (code_buffer *buf, bool is64, arm64_vpr dest, arm64_gpr base, int32_t offset)
 
void emit_arm64_str_vpr (code_buffer *buf, bool is64, arm64_vpr src, arm64_gpr base, int32_t offset)
 
void emit_arm64_ldr_q_imm (code_buffer *buf, arm64_vpr dest, arm64_gpr base, int32_t offset)
 
void emit_arm64_str_q_imm (code_buffer *buf, arm64_vpr src, arm64_gpr base, int32_t offset)
 
static void emit_arm64_arith_imm (code_buffer *buf, bool is_sub, bool is64, bool set_flags, arm64_gpr dest, arm64_gpr base, uint32_t imm)
 
void emit_arm64_add_imm (code_buffer *buf, bool is64, bool set_flags, arm64_gpr dest, arm64_gpr base, uint32_t imm)
 
void emit_arm64_sub_imm (code_buffer *buf, bool is64, bool set_flags, arm64_gpr dest, arm64_gpr base, uint32_t imm)
 
void emit_arm64_blr_reg (code_buffer *buf, arm64_gpr reg)
 
void emit_arm64_ret (code_buffer *buf, arm64_gpr reg)
 
void emit_arm64_cbnz (code_buffer *buf, bool is64, arm64_gpr reg, int32_t offset)
 
void emit_arm64_brk (code_buffer *buf, uint16_t imm)
 
void emit_arm64_b_reg (code_buffer *buf, arm64_gpr reg)
 

Detailed Description

Implements internal helper functions for emitting AArch64 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_arm64_add_imm()

void emit_arm64_add_imm ( code_buffer buf,
bool  is64,
bool  set_flags,
arm64_gpr  dest,
arm64_gpr  base,
uint32_t  imm 
)

◆ emit_arm64_arith_imm()

static void emit_arm64_arith_imm ( code_buffer buf,
bool  is_sub,
bool  is64,
bool  set_flags,
arm64_gpr  dest,
arm64_gpr  base,
uint32_t  imm 
)
static

◆ emit_arm64_b_reg()

void emit_arm64_b_reg ( code_buffer buf,
arm64_gpr  reg 
)

◆ emit_arm64_blr_reg()

void emit_arm64_blr_reg ( code_buffer buf,
arm64_gpr  reg 
)

◆ emit_arm64_brk()

void emit_arm64_brk ( code_buffer buf,
uint16_t  imm 
)

◆ emit_arm64_cbnz()

void emit_arm64_cbnz ( code_buffer buf,
bool  is64,
arm64_gpr  reg,
int32_t  offset 
)

◆ emit_arm64_ldp_post_index()

void emit_arm64_ldp_post_index ( code_buffer buf,
bool  is64,
arm64_gpr  dest1,
arm64_gpr  dest2,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_ldr_imm()

void emit_arm64_ldr_imm ( code_buffer buf,
bool  is64,
arm64_gpr  dest,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_ldr_q_imm()

void emit_arm64_ldr_q_imm ( code_buffer buf,
arm64_vpr  dest,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_ldr_vpr()

void emit_arm64_ldr_vpr ( code_buffer buf,
bool  is64,
arm64_vpr  dest,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_ldrsw_imm()

void emit_arm64_ldrsw_imm ( code_buffer buf,
arm64_gpr  dest,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_load_u64_immediate()

void emit_arm64_load_u64_immediate ( code_buffer buf,
arm64_gpr  dest,
uint64_t  value 
)

◆ emit_arm64_mov_imm_chunk()

static void emit_arm64_mov_imm_chunk ( code_buffer buf,
bool  is_movz,
uint64_t  dest_reg,
uint16_t  imm,
uint8_t  shift_count 
)
static

◆ emit_arm64_mov_reg()

void emit_arm64_mov_reg ( code_buffer buf,
bool  is64,
arm64_gpr  dest,
arm64_gpr  src 
)

◆ emit_arm64_ret()

void emit_arm64_ret ( code_buffer buf,
arm64_gpr  reg 
)

◆ emit_arm64_stp_pre_index()

void emit_arm64_stp_pre_index ( code_buffer buf,
bool  is64,
arm64_gpr  src1,
arm64_gpr  src2,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_str_imm()

void emit_arm64_str_imm ( code_buffer buf,
bool  is64,
arm64_gpr  src,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_str_q_imm()

void emit_arm64_str_q_imm ( code_buffer buf,
arm64_vpr  src,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_str_vpr()

void emit_arm64_str_vpr ( code_buffer buf,
bool  is64,
arm64_vpr  src,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_strb_imm()

void emit_arm64_strb_imm ( code_buffer buf,
arm64_gpr  src,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_strh_imm()

void emit_arm64_strh_imm ( code_buffer buf,
arm64_gpr  src,
arm64_gpr  base,
int32_t  offset 
)

◆ emit_arm64_sub_imm()

void emit_arm64_sub_imm ( code_buffer buf,
bool  is64,
bool  set_flags,
arm64_gpr  dest,
arm64_gpr  base,
uint32_t  imm 
)