diff options
Diffstat (limited to 'yjit_asm.h')
-rw-r--r-- | yjit_asm.h | 298 |
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 |