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

Math operations for JIT code generation. More...

#include "emit.h"
#include <stdbool.h>
#include <stdint.h>
Include dependency graph for emit_math.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Enumerations

enum  emit_cc_t {
  EMIT_CC_O , EMIT_CC_NO , EMIT_CC_B , EMIT_CC_AE ,
  EMIT_CC_E , EMIT_CC_NE , EMIT_CC_BE , EMIT_CC_A ,
  EMIT_CC_S , EMIT_CC_NS , EMIT_CC_P , EMIT_CC_NP ,
  EMIT_CC_L , EMIT_CC_GE , EMIT_CC_LE , EMIT_CC_G
}
 
enum  emit_register_t {
  EMIT_REG_RAX = 0 , EMIT_REG_RCX = 1 , EMIT_REG_RDX = 2 , EMIT_REG_RBX = 3 ,
  EMIT_REG_RSP = 4 , EMIT_REG_RBP = 5 , EMIT_REG_RSI = 6 , EMIT_REG_RDI = 7 ,
  EMIT_REG_R8 = 8 , EMIT_REG_R9 = 9 , EMIT_REG_R10 = 10 , EMIT_REG_R11 = 11 ,
  EMIT_REG_R12 = 12 , EMIT_REG_R13 = 13 , EMIT_REG_R14 = 14 , EMIT_REG_R15 = 15
}
 

Functions

INFIX_API infix_status emit_math_mov_imm (emit_context_t *ctx, emit_register_t dest, uint64_t imm)
 
INFIX_API infix_status emit_math_mov_reg (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_movq_gpr_xmm (emit_context_t *ctx, emit_register_t gpr_dest, emit_register_t xmm_src)
 
INFIX_API infix_status emit_math_movsd_reg (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_addsd (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_load_f64 (emit_context_t *ctx, emit_register_t dest, emit_register_t base, int32_t offset)
 
INFIX_API infix_status emit_math_add (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_add_imm (emit_context_t *ctx, emit_register_t dest, int32_t imm)
 
INFIX_API infix_status emit_math_sub (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_sub_imm (emit_context_t *ctx, emit_register_t dest, int32_t imm)
 
INFIX_API infix_status emit_math_mul (emit_context_t *ctx, emit_register_t src)
 
INFIX_API infix_status emit_math_imul_imm (emit_context_t *ctx, emit_register_t dest, int32_t imm)
 
INFIX_API infix_status emit_math_and (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_or (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_xor (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_not (emit_context_t *ctx, emit_register_t reg)
 
INFIX_API infix_status emit_math_neg (emit_context_t *ctx, emit_register_t reg)
 
INFIX_API infix_status emit_math_shl (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_shr (emit_context_t *ctx, emit_register_t dest, emit_register_t src)
 
INFIX_API infix_status emit_math_sal (emit_context_t *ctx, emit_register_t reg, uint8_t amount)
 
INFIX_API infix_status emit_math_sar (emit_context_t *ctx, emit_register_t reg, uint8_t amount)
 
INFIX_API infix_status emit_math_cmp (emit_context_t *ctx, emit_register_t a, emit_register_t b)
 
INFIX_API infix_status emit_math_cmp_imm (emit_context_t *ctx, emit_register_t reg, int32_t imm)
 
INFIX_API infix_status emit_math_test (emit_context_t *ctx, emit_register_t a, emit_register_t b)
 
INFIX_API infix_status emit_math_jmp (emit_context_t *ctx, const char *label)
 
INFIX_API infix_status emit_math_jmp_cc (emit_context_t *ctx, emit_cc_t cc, const char *label)
 
INFIX_API infix_status emit_math_call (emit_context_t *ctx, const char *name)
 
INFIX_API infix_status emit_math_prologue (emit_context_t *ctx)
 
INFIX_API infix_status emit_math_epilogue (emit_context_t *ctx)
 
INFIX_API infix_status emit_math_ret (emit_context_t *ctx)
 
INFIX_API infix_status emit_math_push (emit_context_t *ctx, emit_register_t reg)
 
INFIX_API infix_status emit_math_pop (emit_context_t *ctx, emit_register_t reg)
 
INFIX_API infix_status emit_math_load_reg (emit_context_t *ctx, emit_register_t dest, emit_register_t base, int32_t offset)
 
INFIX_API infix_status emit_math_store_reg (emit_context_t *ctx, emit_register_t base, int32_t offset, emit_register_t src)
 
INFIX_API infix_status emit_math_load_sym (emit_context_t *ctx, emit_register_t dest, const char *sym)
 
INFIX_API infix_status emit_math_store_sym (emit_context_t *ctx, const char *sym, emit_register_t src)
 

Detailed Description

Math operations for JIT code generation.

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 the code under the terms of either license.

SPDX-License-Identifier: (Artistic-2.0 OR MIT)

Enumeration Type Documentation

◆ emit_cc_t

enum emit_cc_t
Enumerator
EMIT_CC_O 
EMIT_CC_NO 
EMIT_CC_B 
EMIT_CC_AE 
EMIT_CC_E 
EMIT_CC_NE 
EMIT_CC_BE 
EMIT_CC_A 
EMIT_CC_S 
EMIT_CC_NS 
EMIT_CC_P 
EMIT_CC_NP 
EMIT_CC_L 
EMIT_CC_GE 
EMIT_CC_LE 
EMIT_CC_G 

◆ emit_register_t

Enumerator
EMIT_REG_RAX 
EMIT_REG_RCX 
EMIT_REG_RDX 
EMIT_REG_RBX 
EMIT_REG_RSP 
EMIT_REG_RBP 
EMIT_REG_RSI 
EMIT_REG_RDI 
EMIT_REG_R8 
EMIT_REG_R9 
EMIT_REG_R10 
EMIT_REG_R11 
EMIT_REG_R12 
EMIT_REG_R13 
EMIT_REG_R14 
EMIT_REG_R15 

Function Documentation

◆ emit_math_add()

INFIX_API infix_status emit_math_add ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)

◆ emit_math_add_imm()

INFIX_API infix_status emit_math_add_imm ( emit_context_t ctx,
emit_register_t  dest,
int32_t  imm 
)

◆ emit_math_addsd()

INFIX_API infix_status emit_math_addsd ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)

◆ emit_math_and()

INFIX_API infix_status emit_math_and ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)

◆ emit_math_call()

INFIX_API infix_status emit_math_call ( emit_context_t ctx,
const char *  name 
)

◆ emit_math_cmp()

INFIX_API infix_status emit_math_cmp ( emit_context_t ctx,
emit_register_t  a,
emit_register_t  b 
)

◆ emit_math_cmp_imm()

INFIX_API infix_status emit_math_cmp_imm ( emit_context_t ctx,
emit_register_t  reg,
int32_t  imm 
)

◆ emit_math_epilogue()

INFIX_API infix_status emit_math_epilogue ( emit_context_t ctx)

◆ emit_math_imul_imm()

INFIX_API infix_status emit_math_imul_imm ( emit_context_t ctx,
emit_register_t  dest,
int32_t  imm 
)

◆ emit_math_jmp()

INFIX_API infix_status emit_math_jmp ( emit_context_t ctx,
const char *  label 
)

◆ emit_math_jmp_cc()

INFIX_API infix_status emit_math_jmp_cc ( emit_context_t ctx,
emit_cc_t  cc,
const char *  label 
)

◆ emit_math_load_f64()

INFIX_API infix_status emit_math_load_f64 ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  base,
int32_t  offset 
)

◆ emit_math_load_reg()

INFIX_API infix_status emit_math_load_reg ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  base,
int32_t  offset 
)

◆ emit_math_load_sym()

INFIX_API infix_status emit_math_load_sym ( emit_context_t ctx,
emit_register_t  dest,
const char *  sym 
)

◆ emit_math_mov_imm()

INFIX_API infix_status emit_math_mov_imm ( emit_context_t ctx,
emit_register_t  dest,
uint64_t  imm 
)

◆ emit_math_mov_reg()

INFIX_API infix_status emit_math_mov_reg ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)

◆ emit_math_movq_gpr_xmm()

INFIX_API infix_status emit_math_movq_gpr_xmm ( emit_context_t ctx,
emit_register_t  gpr_dest,
emit_register_t  xmm_src 
)

◆ emit_math_movsd_reg()

INFIX_API infix_status emit_math_movsd_reg ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)

◆ emit_math_mul()

INFIX_API infix_status emit_math_mul ( emit_context_t ctx,
emit_register_t  src 
)

◆ emit_math_neg()

INFIX_API infix_status emit_math_neg ( emit_context_t ctx,
emit_register_t  reg 
)

◆ emit_math_not()

INFIX_API infix_status emit_math_not ( emit_context_t ctx,
emit_register_t  reg 
)

◆ emit_math_or()

INFIX_API infix_status emit_math_or ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)

◆ emit_math_pop()

INFIX_API infix_status emit_math_pop ( emit_context_t ctx,
emit_register_t  reg 
)

◆ emit_math_prologue()

INFIX_API infix_status emit_math_prologue ( emit_context_t ctx)

◆ emit_math_push()

INFIX_API infix_status emit_math_push ( emit_context_t ctx,
emit_register_t  reg 
)

◆ emit_math_ret()

INFIX_API infix_status emit_math_ret ( emit_context_t ctx)

◆ emit_math_sal()

INFIX_API infix_status emit_math_sal ( emit_context_t ctx,
emit_register_t  reg,
uint8_t  amount 
)

◆ emit_math_sar()

INFIX_API infix_status emit_math_sar ( emit_context_t ctx,
emit_register_t  reg,
uint8_t  amount 
)

◆ emit_math_shl()

INFIX_API infix_status emit_math_shl ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)

◆ emit_math_shr()

INFIX_API infix_status emit_math_shr ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)

◆ emit_math_store_reg()

INFIX_API infix_status emit_math_store_reg ( emit_context_t ctx,
emit_register_t  base,
int32_t  offset,
emit_register_t  src 
)

◆ emit_math_store_sym()

INFIX_API infix_status emit_math_store_sym ( emit_context_t ctx,
const char *  sym,
emit_register_t  src 
)

◆ emit_math_sub()

INFIX_API infix_status emit_math_sub ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)

◆ emit_math_sub_imm()

INFIX_API infix_status emit_math_sub_imm ( emit_context_t ctx,
emit_register_t  dest,
int32_t  imm 
)

◆ emit_math_test()

INFIX_API infix_status emit_math_test ( emit_context_t ctx,
emit_register_t  a,
emit_register_t  b 
)

◆ emit_math_xor()

INFIX_API infix_status emit_math_xor ( emit_context_t ctx,
emit_register_t  dest,
emit_register_t  src 
)