summaryrefslogtreecommitdiff
path: root/yjit_asm.h
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2021-10-01 18:38:39 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:42 -0400
commitf6da559d5b88981000d4c575b6384f59d30dec22 (patch)
tree00fab354584931dd6f88dc275c26260c17259379 /yjit_asm.h
parent25eed2848344f19385b39daaac8ca5eef79f9466 (diff)
Put YJIT into a single compilation unit
For upstreaming, we want functions we export either prefixed with "rb_" or made static. Historically we haven't been following this rule, so we were "leaking" a lot of symbols as `make leak-globals` would tell us. This change unifies everything YJIT into a single compilation unit, yjit.o, and makes everything unprefixed static to pass `make leak-globals`. This manual "unified build" setup is similar to that of vm.o. Having everything in one compilation unit allows static functions to be visible across YJIT files and removes the need for declarations in headers in some cases. Unnecessary declarations were removed. Other changes of note: - switched to MJIT_SYMBOL_EXPORT_BEGIN which indicates stuff as being off limits for native extensions - the first include of each YJIT file is change to be "internal.h" - undefined MAP_STACK before explicitly redefining it since it collide's with a definition in system headers. Consider renaming?
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