summaryrefslogtreecommitdiff
path: root/yjit_asm.h
diff options
context:
space:
mode:
Diffstat (limited to 'yjit_asm.h')
-rw-r--r--yjit_asm.h298
1 files changed, 149 insertions, 149 deletions
diff --git a/yjit_asm.h b/yjit_asm.h
index 2502a2084c..30682b5078 100644
--- a/yjit_asm.h
+++ b/yjit_asm.h
@@ -234,20 +234,20 @@ static const x86opnd_t R15B = { OPND_REG, 8, .as.reg = { REG_GP, 15 }};
#define C_ARG_REGS ( (x86opnd_t[]){ RDI, RSI, RDX, RCX, R8, R9 } )
// Compute the number of bits needed to store a signed or unsigned value
-uint32_t sig_imm_size(int64_t imm);
-uint32_t unsig_imm_size(uint64_t imm);
+static inline uint32_t sig_imm_size(int64_t imm);
+static inline uint32_t unsig_imm_size(uint64_t imm);
// Memory operand with base register and displacement/offset
-x86opnd_t mem_opnd(uint32_t num_bits, x86opnd_t base_reg, int32_t disp);
+static inline x86opnd_t mem_opnd(uint32_t num_bits, x86opnd_t base_reg, int32_t disp);
// Scale-index-base memory operand
-x86opnd_t mem_opnd_sib(uint32_t num_bits, x86opnd_t base_reg, x86opnd_t index_reg, int32_t scale, int32_t disp);
+static inline x86opnd_t mem_opnd_sib(uint32_t num_bits, x86opnd_t base_reg, x86opnd_t index_reg, int32_t scale, int32_t disp);
// Immediate number operand
-x86opnd_t imm_opnd(int64_t val);
+static inline x86opnd_t imm_opnd(int64_t val);
// Constant pointer operand
-x86opnd_t const_ptr_opnd(const void *ptr);
+static inline x86opnd_t const_ptr_opnd(const void *ptr);
// Struct member operand
#define member_opnd(base_reg, struct_type, member_name) mem_opnd( \
@@ -265,150 +265,150 @@ x86opnd_t const_ptr_opnd(const void *ptr);
)
// Machine code allocation
-uint8_t *alloc_exec_mem(uint32_t mem_size);
-code_page_t *alloc_code_page(void);
-void free_code_page(code_page_t *code_page);
-
-// Code block methods
-void cb_init(codeblock_t *cb, uint8_t *mem_block, uint32_t mem_size);
-void cb_align_pos(codeblock_t *cb, uint32_t multiple);
-void cb_set_pos(codeblock_t *cb, uint32_t pos);
-void cb_set_write_ptr(codeblock_t *cb, uint8_t *code_ptr);
-uint8_t *cb_get_ptr(codeblock_t *cb, uint32_t index);
-uint8_t *cb_get_write_ptr(codeblock_t *cb);
-void cb_write_byte(codeblock_t *cb, uint8_t byte);
-void cb_write_bytes(codeblock_t *cb, uint32_t num_bytes, ...);
-void cb_write_int(codeblock_t *cb, uint64_t val, uint32_t num_bits);
-uint32_t cb_new_label(codeblock_t *cb, const char *name);
-void cb_write_label(codeblock_t *cb, uint32_t label_idx);
-void cb_label_ref(codeblock_t *cb, uint32_t label_idx);
-void cb_link_labels(codeblock_t *cb);
+static uint8_t *alloc_exec_mem(uint32_t mem_size);
+static code_page_t *alloc_code_page(void);
+static void free_code_page(code_page_t *code_page);
+
+
+static inline void cb_init(codeblock_t *cb, uint8_t *mem_block, uint32_t mem_size);
+static inline void cb_align_pos(codeblock_t *cb, uint32_t multiple);
+static inline void cb_set_pos(codeblock_t *cb, uint32_t pos);
+static inline void cb_set_write_ptr(codeblock_t *cb, uint8_t *code_ptr);
+static inline uint8_t *cb_get_ptr(codeblock_t *cb, uint32_t index);
+static inline uint8_t *cb_get_write_ptr(codeblock_t *cb);
+static inline void cb_write_byte(codeblock_t *cb, uint8_t byte);
+static inline void cb_write_bytes(codeblock_t *cb, uint32_t num_bytes, ...);
+static inline void cb_write_int(codeblock_t *cb, uint64_t val, uint32_t num_bits);
+static inline uint32_t cb_new_label(codeblock_t *cb, const char *name);
+static inline void cb_write_label(codeblock_t *cb, uint32_t label_idx);
+static inline void cb_label_ref(codeblock_t *cb, uint32_t label_idx);
+static inline void cb_link_labels(codeblock_t *cb);
// Encode individual instructions into a code block
-void add(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void and(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void call_ptr(codeblock_t *cb, x86opnd_t scratch_reg, uint8_t *dst_ptr);
-void call_label(codeblock_t *cb, uint32_t label_idx);
-void call(codeblock_t *cb, x86opnd_t opnd);
-void cmova(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovae(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovb(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovbe(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovc(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmove(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovg(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovge(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovl(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovle(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovna(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovnae(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovnb(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovnbe(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovnc(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovne(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovng(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovnge(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovnl(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovnle(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovno(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovnp(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovns(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovnz(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovo(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovp(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovpe(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovpo(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovs(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmovz(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void cmp(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void cdq(codeblock_t *cb);
-void cqo(codeblock_t *cb);
-void int3(codeblock_t *cb);
-void ja_label(codeblock_t *cb, uint32_t label_idx);
-void jae_label(codeblock_t *cb, uint32_t label_idx);
-void jb_label(codeblock_t *cb, uint32_t label_idx);
-void jbe_label(codeblock_t *cb, uint32_t label_idx);
-void jc_label(codeblock_t *cb, uint32_t label_idx);
-void je_label(codeblock_t *cb, uint32_t label_idx);
-void jg_label(codeblock_t *cb, uint32_t label_idx);
-void jge_label(codeblock_t *cb, uint32_t label_idx);
-void jl_label(codeblock_t *cb, uint32_t label_idx);
-void jle_label(codeblock_t *cb, uint32_t label_idx);
-void jna_label(codeblock_t *cb, uint32_t label_idx);
-void jnae_label(codeblock_t *cb, uint32_t label_idx);
-void jnb_label(codeblock_t *cb, uint32_t label_idx);
-void jnbe_label(codeblock_t *cb, uint32_t label_idx);
-void jnc_label(codeblock_t *cb, uint32_t label_idx);
-void jne_label(codeblock_t *cb, uint32_t label_idx);
-void jng_label(codeblock_t *cb, uint32_t label_idx);
-void jnge_label(codeblock_t *cb, uint32_t label_idx);
-void jnl_label(codeblock_t *cb, uint32_t label_idx);
-void jnle_label(codeblock_t *cb, uint32_t label_idx);
-void jno_label(codeblock_t *cb, uint32_t label_idx);
-void jnp_label(codeblock_t *cb, uint32_t label_idx);
-void jns_label(codeblock_t *cb, uint32_t label_idx);
-void jnz_label(codeblock_t *cb, uint32_t label_idx);
-void jo_label(codeblock_t *cb, uint32_t label_idx);
-void jp_label(codeblock_t *cb, uint32_t label_idx);
-void jpe_label(codeblock_t *cb, uint32_t label_idx);
-void jpo_label(codeblock_t *cb, uint32_t label_idx);
-void js_label(codeblock_t *cb, uint32_t label_idx);
-void jz_label(codeblock_t *cb, uint32_t label_idx);
-void ja_ptr(codeblock_t *cb, uint8_t *ptr);
-void jae_ptr(codeblock_t *cb, uint8_t *ptr);
-void jb_ptr(codeblock_t *cb, uint8_t *ptr);
-void jbe_ptr(codeblock_t *cb, uint8_t *ptr);
-void jc_ptr(codeblock_t *cb, uint8_t *ptr);
-void je_ptr(codeblock_t *cb, uint8_t *ptr);
-void jg_ptr(codeblock_t *cb, uint8_t *ptr);
-void jge_ptr(codeblock_t *cb, uint8_t *ptr);
-void jl_ptr(codeblock_t *cb, uint8_t *ptr);
-void jle_ptr(codeblock_t *cb, uint8_t *ptr);
-void jna_ptr(codeblock_t *cb, uint8_t *ptr);
-void jnae_ptr(codeblock_t *cb, uint8_t *ptr);
-void jnb_ptr(codeblock_t *cb, uint8_t *ptr);
-void jnbe_ptr(codeblock_t *cb, uint8_t *ptr);
-void jnc_ptr(codeblock_t *cb, uint8_t *ptr);
-void jne_ptr(codeblock_t *cb, uint8_t *ptr);
-void jng_ptr(codeblock_t *cb, uint8_t *ptr);
-void jnge_ptr(codeblock_t *cb, uint8_t *ptr);
-void jnl_ptr(codeblock_t *cb, uint8_t *ptr);
-void jnle_ptr(codeblock_t *cb, uint8_t *ptr);
-void jno_ptr(codeblock_t *cb, uint8_t *ptr);
-void jnp_ptr(codeblock_t *cb, uint8_t *ptr);
-void jns_ptr(codeblock_t *cb, uint8_t *ptr);
-void jnz_ptr(codeblock_t *cb, uint8_t *ptr);
-void jo_ptr(codeblock_t *cb, uint8_t *ptr);
-void jp_ptr(codeblock_t *cb, uint8_t *ptr);
-void jpe_ptr(codeblock_t *cb, uint8_t *ptr);
-void jpo_ptr(codeblock_t *cb, uint8_t *ptr);
-void js_ptr(codeblock_t *cb, uint8_t *ptr);
-void jz_ptr(codeblock_t *cb, uint8_t *ptr);
-void jmp_label(codeblock_t *cb, uint32_t label_idx);
-void jmp_ptr(codeblock_t *cb, uint8_t *ptr);
-void jmp_rm(codeblock_t *cb, x86opnd_t opnd);
-void jmp32(codeblock_t *cb, int32_t offset);
-void lea(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void mov(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void movsx(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
-void neg(codeblock_t *cb, x86opnd_t opnd);
-void nop(codeblock_t *cb, uint32_t length);
-void not(codeblock_t *cb, x86opnd_t opnd);
-void or(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void pop(codeblock_t *cb, x86opnd_t reg);
-void popfq(codeblock_t *cb);
-void push(codeblock_t *cb, x86opnd_t opnd);
-void pushfq(codeblock_t *cb);
-void ret(codeblock_t *cb);
-void sal(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void sar(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void shl(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void shr(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void sub(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void test(codeblock_t *cb, x86opnd_t rm_opnd, x86opnd_t test_opnd);
-void ud2(codeblock_t *cb);
-void xchg(codeblock_t *cb, x86opnd_t rm_opnd, x86opnd_t r_opnd);
-void xor(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
-void cb_write_lock_prefix(codeblock_t *cb);
+static inline void add(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void and(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void call_ptr(codeblock_t *cb, x86opnd_t scratch_reg, uint8_t *dst_ptr);
+static inline void call_label(codeblock_t *cb, uint32_t label_idx);
+static inline void call(codeblock_t *cb, x86opnd_t opnd);
+static inline void cmova(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovae(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovb(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovbe(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovc(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmove(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovg(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovge(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovl(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovle(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovna(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovnae(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovnb(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovnbe(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovnc(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovne(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovng(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovnge(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovnl(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovnle(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovno(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovnp(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovns(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovnz(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovo(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovp(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovpe(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovpo(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovs(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmovz(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void cmp(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void cdq(codeblock_t *cb);
+static inline void cqo(codeblock_t *cb);
+static inline void int3(codeblock_t *cb);
+static inline void ja_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jae_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jb_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jbe_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jc_label(codeblock_t *cb, uint32_t label_idx);
+static inline void je_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jg_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jge_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jl_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jle_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jna_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jnae_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jnb_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jnbe_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jnc_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jne_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jng_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jnge_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jnl_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jnle_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jno_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jnp_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jns_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jnz_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jo_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jp_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jpe_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jpo_label(codeblock_t *cb, uint32_t label_idx);
+static inline void js_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jz_label(codeblock_t *cb, uint32_t label_idx);
+static inline void ja_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jae_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jb_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jbe_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jc_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void je_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jg_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jge_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jl_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jle_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jna_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jnae_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jnb_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jnbe_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jnc_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jne_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jng_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jnge_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jnl_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jnle_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jno_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jnp_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jns_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jnz_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jo_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jp_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jpe_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jpo_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void js_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jz_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jmp_label(codeblock_t *cb, uint32_t label_idx);
+static inline void jmp_ptr(codeblock_t *cb, uint8_t *ptr);
+static inline void jmp_rm(codeblock_t *cb, x86opnd_t opnd);
+static inline void jmp32(codeblock_t *cb, int32_t offset);
+static inline void lea(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void mov(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void movsx(codeblock_t *cb, x86opnd_t dst, x86opnd_t src);
+static inline void neg(codeblock_t *cb, x86opnd_t opnd);
+static inline void nop(codeblock_t *cb, uint32_t length);
+static inline void not(codeblock_t *cb, x86opnd_t opnd);
+static inline void or(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void pop(codeblock_t *cb, x86opnd_t reg);
+static inline void popfq(codeblock_t *cb);
+static inline void push(codeblock_t *cb, x86opnd_t opnd);
+static inline void pushfq(codeblock_t *cb);
+static inline void ret(codeblock_t *cb);
+static inline void sal(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void sar(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void shl(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void shr(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void sub(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void test(codeblock_t *cb, x86opnd_t rm_opnd, x86opnd_t test_opnd);
+static inline void ud2(codeblock_t *cb);
+static inline void xchg(codeblock_t *cb, x86opnd_t rm_opnd, x86opnd_t r_opnd);
+static inline void xor(codeblock_t *cb, x86opnd_t opnd0, x86opnd_t opnd1);
+static inline void cb_write_lock_prefix(codeblock_t *cb);
#endif