Mercurial > repos > blastem
diff gen_x86.h @ 567:8e395210f50f
Refactor gen_x86 to use an interface more like gen_arm and to remove the need for the caller to decide whether an 8-bit or 32-bit displacement is needed in the rdisp functions. Update m68k_to_x86 to use the new version of the gen_x86 functions and do some minor refactoring there in the process
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 02 Mar 2014 14:45:36 -0800 |
parents | 96489fb27dbf |
children | 76bba9ffe351 |
line wrap: on
line diff
--- a/gen_x86.h Sun Mar 02 14:41:43 2014 -0800 +++ b/gen_x86.h Sun Mar 02 14:45:36 2014 -0800 @@ -7,6 +7,7 @@ #define GEN_X86_H_ #include <stdint.h> +#include "gen.h" enum { RAX = 0, @@ -59,8 +60,10 @@ #ifdef X86_64 #define SZ_PTR SZ_Q +#define MAX_INST_LEN 14 #else #define SZ_PTR SZ_D +#define MAX_INST_LEN 11 #endif enum { @@ -75,145 +78,142 @@ MODE_IMMED = 0xFF } x86_modes; +void check_alloc_code(code_info *code, uint32_t inst_size); -uint8_t * rol_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * ror_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * rcl_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * rcr_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * shl_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * shr_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * sar_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * rol_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * ror_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * rcl_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * rcr_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * shl_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * shr_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * sar_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * rol_clr(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * ror_clr(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * rcl_clr(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * rcr_clr(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * shl_clr(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * shr_clr(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * sar_clr(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * rol_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * ror_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * rcl_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * rcr_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * shl_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * shr_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * sar_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * add_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * adc_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * or_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * xor_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * and_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * sub_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * sbb_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * cmp_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * add_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * adc_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * or_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * xor_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * and_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * sub_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * sbb_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * cmp_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * add_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * add_irdisp32(uint8_t * out, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); -uint8_t * adc_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * or_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * xor_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * and_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * sub_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * sbb_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * cmp_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * add_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * adc_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * add_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * adc_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * or_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * or_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * xor_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * xor_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * and_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * and_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * sub_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * sub_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * sbb_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * sbb_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * cmp_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * cmp_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * imul_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * imul_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * imul_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * not_r(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * neg_r(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * not_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * neg_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * mul_r(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * imul_r(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * div_r(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * idiv_r(uint8_t * out, uint8_t dst, uint8_t size); -uint8_t * mul_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * imul_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * div_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * idiv_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * test_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * test_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * test_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * test_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * test_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * mov_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * mov_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); -uint8_t * mov_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); -uint8_t * mov_rrdisp32(uint8_t * out, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); -uint8_t * mov_rdisp32r(uint8_t * out, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); -uint8_t * mov_rrindex(uint8_t * out, uint8_t src, uint8_t dst_base, uint8_t dst_index, uint8_t scale, uint8_t size); -uint8_t * mov_rindexr(uint8_t * out, uint8_t src_base, uint8_t src_index, uint8_t scale, uint8_t dst, uint8_t size); -uint8_t * mov_rrind(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * mov_rindr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * mov_ir(uint8_t * out, int64_t val, uint8_t dst, uint8_t size); -uint8_t * mov_irdisp8(uint8_t * out, int32_t val, uint8_t dst, int8_t disp, uint8_t size); -uint8_t * mov_irind(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); -uint8_t * movsx_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t src_size, uint8_t size); -uint8_t * movsx_rdisp8r(uint8_t * out, uint8_t src, int8_t disp, uint8_t dst, uint8_t src_size, uint8_t size); -uint8_t * movzx_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t src_size, uint8_t size); -uint8_t * movzx_rdisp8r(uint8_t * out, uint8_t src, int8_t disp, uint8_t dst, uint8_t src_size, uint8_t size); -uint8_t * xchg_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * pushf(uint8_t * out); -uint8_t * popf(uint8_t * out); -uint8_t * push_r(uint8_t * out, uint8_t reg); -uint8_t * pop_r(uint8_t * out, uint8_t reg); -uint8_t * setcc_r(uint8_t * out, uint8_t cc, uint8_t dst); -uint8_t * setcc_rind(uint8_t * out, uint8_t cc, uint8_t dst); -uint8_t * setcc_rdisp8(uint8_t * out, uint8_t cc, uint8_t dst, int8_t disp); -uint8_t * bt_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * bt_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size); -uint8_t * bt_rrdisp32(uint8_t * out, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size); -uint8_t * bt_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * bt_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t dst_disp, uint8_t size); -uint8_t * bts_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * bts_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size); -uint8_t * bts_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * bts_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t dst_disp, uint8_t size); -uint8_t * btr_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * btr_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size); -uint8_t * btr_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * btr_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t dst_disp, uint8_t size); -uint8_t * btc_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); -uint8_t * btc_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size); -uint8_t * btc_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); -uint8_t * btc_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t dst_disp, uint8_t size); -uint8_t * jcc(uint8_t * out, uint8_t cc, uint8_t *dest); -uint8_t * jmp(uint8_t * out, uint8_t *dest); -uint8_t * jmp_r(uint8_t * out, uint8_t dst); -uint8_t * call(uint8_t * out, uint8_t * fun); -uint8_t * call_r(uint8_t * out, uint8_t dst); -uint8_t * retn(uint8_t * out); -uint8_t * cdq(uint8_t * out); -uint8_t * loop(uint8_t * out, uint8_t * dst); +void rol_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void ror_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void rcl_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void rcr_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void shl_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void shr_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void sar_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void rol_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void ror_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void rcl_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void rcr_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void shl_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void shr_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void sar_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void rol_clr(code_info *code, uint8_t dst, uint8_t size); +void ror_clr(code_info *code, uint8_t dst, uint8_t size); +void rcl_clr(code_info *code, uint8_t dst, uint8_t size); +void rcr_clr(code_info *code, uint8_t dst, uint8_t size); +void shl_clr(code_info *code, uint8_t dst, uint8_t size); +void shr_clr(code_info *code, uint8_t dst, uint8_t size); +void sar_clr(code_info *code, uint8_t dst, uint8_t size); +void rol_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void ror_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void rcl_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void rcr_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void shl_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void shr_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void sar_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void add_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void adc_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void or_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void xor_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void and_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void sub_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void sbb_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void cmp_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void add_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void adc_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void or_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void xor_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void and_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void sub_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void sbb_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void cmp_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void add_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void adc_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void or_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void xor_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void and_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void sub_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void sbb_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void cmp_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void add_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void adc_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void add_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void adc_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void or_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void or_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void xor_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void xor_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void and_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void and_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void sub_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void sub_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void sbb_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void sbb_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void cmp_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void cmp_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void imul_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void imul_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void imul_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void not_r(code_info *code, uint8_t dst, uint8_t size); +void neg_r(code_info *code, uint8_t dst, uint8_t size); +void not_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void neg_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void mul_r(code_info *code, uint8_t dst, uint8_t size); +void imul_r(code_info *code, uint8_t dst, uint8_t size); +void div_r(code_info *code, uint8_t dst, uint8_t size); +void idiv_r(code_info *code, uint8_t dst, uint8_t size); +void mul_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void imul_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void div_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void idiv_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size); +void test_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void test_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void test_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); +void test_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void test_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void mov_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void mov_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); +void mov_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); +void mov_rrindex(code_info *code, uint8_t src, uint8_t dst_base, uint8_t dst_index, uint8_t scale, uint8_t size); +void mov_rindexr(code_info *code, uint8_t src_base, uint8_t src_index, uint8_t scale, uint8_t dst, uint8_t size); +void mov_rrind(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void mov_rindr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void mov_ir(code_info *code, int64_t val, uint8_t dst, uint8_t size); +void mov_irdisp(code_info *code, int32_t val, uint8_t dst, int32_t disp, uint8_t size); +void mov_irind(code_info *code, int32_t val, uint8_t dst, uint8_t size); +void movsx_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t src_size, uint8_t size); +void movsx_rdispr(code_info *code, uint8_t src, int32_t disp, uint8_t dst, uint8_t src_size, uint8_t size); +void movzx_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t src_size, uint8_t size); +void movzx_rdispr(code_info *code, uint8_t src, int32_t disp, uint8_t dst, uint8_t src_size, uint8_t size); +void xchg_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void pushf(code_info *code); +void popf(code_info *code); +void push_r(code_info *code, uint8_t reg); +void pop_r(code_info *code, uint8_t reg); +void setcc_r(code_info *code, uint8_t cc, uint8_t dst); +void setcc_rind(code_info *code, uint8_t cc, uint8_t dst); +void setcc_rdisp(code_info *code, uint8_t cc, uint8_t dst, int32_t disp); +void bt_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void bt_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size); +void bt_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void bt_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size); +void bts_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void bts_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size); +void bts_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void bts_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size); +void btr_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void btr_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size); +void btr_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void btr_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size); +void btc_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size); +void btc_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size); +void btc_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size); +void btc_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size); +void jcc(code_info *code, uint8_t cc, code_ptr dest); +void jmp(code_info *code, code_ptr dest); +void jmp_r(code_info *code, uint8_t dst); +void call(code_info *code, code_ptr fun); +void call_r(code_info *code, uint8_t dst); +void retn(code_info *code); +void cdq(code_info *code); +void loop(code_info *code, code_ptr dst); #endif //GEN_X86_H_