comparison 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
comparison
equal deleted inserted replaced
566:624dd5106060 567:8e395210f50f
5 */ 5 */
6 #ifndef GEN_X86_H_ 6 #ifndef GEN_X86_H_
7 #define GEN_X86_H_ 7 #define GEN_X86_H_
8 8
9 #include <stdint.h> 9 #include <stdint.h>
10 #include "gen.h"
10 11
11 enum { 12 enum {
12 RAX = 0, 13 RAX = 0,
13 RCX, 14 RCX,
14 RDX, 15 RDX,
57 SZ_Q 58 SZ_Q
58 } x86_size; 59 } x86_size;
59 60
60 #ifdef X86_64 61 #ifdef X86_64
61 #define SZ_PTR SZ_Q 62 #define SZ_PTR SZ_Q
63 #define MAX_INST_LEN 14
62 #else 64 #else
63 #define SZ_PTR SZ_D 65 #define SZ_PTR SZ_D
66 #define MAX_INST_LEN 11
64 #endif 67 #endif
65 68
66 enum { 69 enum {
67 MODE_REG_INDIRECT = 0, 70 MODE_REG_INDIRECT = 0,
68 MODE_REG_INDEXED = 4, 71 MODE_REG_INDEXED = 4,
73 MODE_REG_DIRECT = 0xC0, 76 MODE_REG_DIRECT = 0xC0,
74 //"phony" mode 77 //"phony" mode
75 MODE_IMMED = 0xFF 78 MODE_IMMED = 0xFF
76 } x86_modes; 79 } x86_modes;
77 80
78 81 void check_alloc_code(code_info *code, uint32_t inst_size);
79 uint8_t * rol_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 82
80 uint8_t * ror_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 83 void rol_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
81 uint8_t * rcl_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 84 void ror_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
82 uint8_t * rcr_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 85 void rcl_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
83 uint8_t * shl_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 86 void rcr_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
84 uint8_t * shr_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 87 void shl_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
85 uint8_t * sar_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 88 void shr_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
86 uint8_t * rol_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); 89 void sar_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
87 uint8_t * ror_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); 90 void rol_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size);
88 uint8_t * rcl_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); 91 void ror_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size);
89 uint8_t * rcr_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); 92 void rcl_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size);
90 uint8_t * shl_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); 93 void rcr_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size);
91 uint8_t * shr_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); 94 void shl_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size);
92 uint8_t * sar_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t disp, uint8_t size); 95 void shr_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size);
93 uint8_t * rol_clr(uint8_t * out, uint8_t dst, uint8_t size); 96 void sar_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t disp, uint8_t size);
94 uint8_t * ror_clr(uint8_t * out, uint8_t dst, uint8_t size); 97 void rol_clr(code_info *code, uint8_t dst, uint8_t size);
95 uint8_t * rcl_clr(uint8_t * out, uint8_t dst, uint8_t size); 98 void ror_clr(code_info *code, uint8_t dst, uint8_t size);
96 uint8_t * rcr_clr(uint8_t * out, uint8_t dst, uint8_t size); 99 void rcl_clr(code_info *code, uint8_t dst, uint8_t size);
97 uint8_t * shl_clr(uint8_t * out, uint8_t dst, uint8_t size); 100 void rcr_clr(code_info *code, uint8_t dst, uint8_t size);
98 uint8_t * shr_clr(uint8_t * out, uint8_t dst, uint8_t size); 101 void shl_clr(code_info *code, uint8_t dst, uint8_t size);
99 uint8_t * sar_clr(uint8_t * out, uint8_t dst, uint8_t size); 102 void shr_clr(code_info *code, uint8_t dst, uint8_t size);
100 uint8_t * rol_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 103 void sar_clr(code_info *code, uint8_t dst, uint8_t size);
101 uint8_t * ror_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 104 void rol_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
102 uint8_t * rcl_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 105 void ror_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
103 uint8_t * rcr_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 106 void rcl_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
104 uint8_t * shl_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 107 void rcr_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
105 uint8_t * shr_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 108 void shl_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
106 uint8_t * sar_clrdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 109 void shr_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
107 uint8_t * add_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 110 void sar_clrdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
108 uint8_t * adc_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 111 void add_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
109 uint8_t * or_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 112 void adc_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
110 uint8_t * xor_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 113 void or_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
111 uint8_t * and_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 114 void xor_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
112 uint8_t * sub_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 115 void and_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
113 uint8_t * sbb_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 116 void sub_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
114 uint8_t * cmp_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 117 void sbb_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
115 uint8_t * add_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 118 void cmp_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
116 uint8_t * adc_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 119 void add_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size);
117 uint8_t * or_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 120 void adc_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size);
118 uint8_t * xor_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 121 void or_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size);
119 uint8_t * and_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 122 void xor_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size);
120 uint8_t * sub_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 123 void and_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size);
121 uint8_t * sbb_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 124 void sub_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size);
122 uint8_t * cmp_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 125 void sbb_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size);
123 uint8_t * add_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); 126 void cmp_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size);
124 uint8_t * add_irdisp32(uint8_t * out, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size); 127 void add_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size);
125 uint8_t * adc_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); 128 void adc_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size);
126 uint8_t * or_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); 129 void or_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size);
127 uint8_t * xor_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); 130 void xor_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size);
128 uint8_t * and_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); 131 void and_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size);
129 uint8_t * sub_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); 132 void sub_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size);
130 uint8_t * sbb_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); 133 void sbb_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size);
131 uint8_t * cmp_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); 134 void cmp_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size);
132 uint8_t * add_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 135 void add_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
133 uint8_t * adc_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 136 void adc_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
134 uint8_t * add_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 137 void add_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
135 uint8_t * adc_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 138 void adc_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
136 uint8_t * or_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 139 void or_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
137 uint8_t * or_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 140 void or_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
138 uint8_t * xor_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 141 void xor_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
139 uint8_t * xor_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 142 void xor_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
140 uint8_t * and_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 143 void and_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
141 uint8_t * and_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 144 void and_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
142 uint8_t * sub_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 145 void sub_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
143 uint8_t * sub_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 146 void sub_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
144 uint8_t * sbb_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 147 void sbb_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
145 uint8_t * sbb_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 148 void sbb_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
146 uint8_t * cmp_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 149 void cmp_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
147 uint8_t * cmp_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 150 void cmp_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
148 uint8_t * imul_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 151 void imul_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
149 uint8_t * imul_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 152 void imul_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
150 uint8_t * imul_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 153 void imul_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
151 uint8_t * not_r(uint8_t * out, uint8_t dst, uint8_t size); 154 void not_r(code_info *code, uint8_t dst, uint8_t size);
152 uint8_t * neg_r(uint8_t * out, uint8_t dst, uint8_t size); 155 void neg_r(code_info *code, uint8_t dst, uint8_t size);
153 uint8_t * not_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 156 void not_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
154 uint8_t * neg_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 157 void neg_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
155 uint8_t * mul_r(uint8_t * out, uint8_t dst, uint8_t size); 158 void mul_r(code_info *code, uint8_t dst, uint8_t size);
156 uint8_t * imul_r(uint8_t * out, uint8_t dst, uint8_t size); 159 void imul_r(code_info *code, uint8_t dst, uint8_t size);
157 uint8_t * div_r(uint8_t * out, uint8_t dst, uint8_t size); 160 void div_r(code_info *code, uint8_t dst, uint8_t size);
158 uint8_t * idiv_r(uint8_t * out, uint8_t dst, uint8_t size); 161 void idiv_r(code_info *code, uint8_t dst, uint8_t size);
159 uint8_t * mul_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 162 void mul_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
160 uint8_t * imul_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 163 void imul_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
161 uint8_t * div_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 164 void div_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
162 uint8_t * idiv_rdisp8(uint8_t * out, uint8_t dst_base, int8_t disp, uint8_t size); 165 void idiv_rdisp(code_info *code, uint8_t dst_base, int32_t disp, uint8_t size);
163 uint8_t * test_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 166 void test_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
164 uint8_t * test_ir(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 167 void test_ir(code_info *code, int32_t val, uint8_t dst, uint8_t size);
165 uint8_t * test_irdisp8(uint8_t * out, int32_t val, uint8_t dst_base, int8_t disp, uint8_t size); 168 void test_irdisp(code_info *code, int32_t val, uint8_t dst_base, int32_t disp, uint8_t size);
166 uint8_t * test_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 169 void test_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
167 uint8_t * test_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 170 void test_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
168 uint8_t * mov_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 171 void mov_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
169 uint8_t * mov_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t disp, uint8_t size); 172 void mov_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size);
170 uint8_t * mov_rdisp8r(uint8_t * out, uint8_t src_base, int8_t disp, uint8_t dst, uint8_t size); 173 void mov_rdispr(code_info *code, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size);
171 uint8_t * mov_rrdisp32(uint8_t * out, uint8_t src, uint8_t dst_base, int32_t disp, uint8_t size); 174 void mov_rrindex(code_info *code, uint8_t src, uint8_t dst_base, uint8_t dst_index, uint8_t scale, uint8_t size);
172 uint8_t * mov_rdisp32r(uint8_t * out, uint8_t src_base, int32_t disp, uint8_t dst, uint8_t size); 175 void mov_rindexr(code_info *code, uint8_t src_base, uint8_t src_index, uint8_t scale, uint8_t dst, uint8_t size);
173 uint8_t * mov_rrindex(uint8_t * out, uint8_t src, uint8_t dst_base, uint8_t dst_index, uint8_t scale, uint8_t size); 176 void mov_rrind(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
174 uint8_t * mov_rindexr(uint8_t * out, uint8_t src_base, uint8_t src_index, uint8_t scale, uint8_t dst, uint8_t size); 177 void mov_rindr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
175 uint8_t * mov_rrind(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 178 void mov_ir(code_info *code, int64_t val, uint8_t dst, uint8_t size);
176 uint8_t * mov_rindr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 179 void mov_irdisp(code_info *code, int32_t val, uint8_t dst, int32_t disp, uint8_t size);
177 uint8_t * mov_ir(uint8_t * out, int64_t val, uint8_t dst, uint8_t size); 180 void mov_irind(code_info *code, int32_t val, uint8_t dst, uint8_t size);
178 uint8_t * mov_irdisp8(uint8_t * out, int32_t val, uint8_t dst, int8_t disp, uint8_t size); 181 void movsx_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t src_size, uint8_t size);
179 uint8_t * mov_irind(uint8_t * out, int32_t val, uint8_t dst, uint8_t size); 182 void movsx_rdispr(code_info *code, uint8_t src, int32_t disp, uint8_t dst, uint8_t src_size, uint8_t size);
180 uint8_t * movsx_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t src_size, uint8_t size); 183 void movzx_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t src_size, uint8_t size);
181 uint8_t * movsx_rdisp8r(uint8_t * out, uint8_t src, int8_t disp, uint8_t dst, uint8_t src_size, uint8_t size); 184 void movzx_rdispr(code_info *code, uint8_t src, int32_t disp, uint8_t dst, uint8_t src_size, uint8_t size);
182 uint8_t * movzx_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t src_size, uint8_t size); 185 void xchg_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
183 uint8_t * movzx_rdisp8r(uint8_t * out, uint8_t src, int8_t disp, uint8_t dst, uint8_t src_size, uint8_t size); 186 void pushf(code_info *code);
184 uint8_t * xchg_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 187 void popf(code_info *code);
185 uint8_t * pushf(uint8_t * out); 188 void push_r(code_info *code, uint8_t reg);
186 uint8_t * popf(uint8_t * out); 189 void pop_r(code_info *code, uint8_t reg);
187 uint8_t * push_r(uint8_t * out, uint8_t reg); 190 void setcc_r(code_info *code, uint8_t cc, uint8_t dst);
188 uint8_t * pop_r(uint8_t * out, uint8_t reg); 191 void setcc_rind(code_info *code, uint8_t cc, uint8_t dst);
189 uint8_t * setcc_r(uint8_t * out, uint8_t cc, uint8_t dst); 192 void setcc_rdisp(code_info *code, uint8_t cc, uint8_t dst, int32_t disp);
190 uint8_t * setcc_rind(uint8_t * out, uint8_t cc, uint8_t dst); 193 void bt_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
191 uint8_t * setcc_rdisp8(uint8_t * out, uint8_t cc, uint8_t dst, int8_t disp); 194 void bt_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size);
192 uint8_t * bt_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 195 void bt_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
193 uint8_t * bt_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size); 196 void bt_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size);
194 uint8_t * bt_rrdisp32(uint8_t * out, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size); 197 void bts_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
195 uint8_t * bt_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 198 void bts_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size);
196 uint8_t * bt_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t dst_disp, uint8_t size); 199 void bts_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
197 uint8_t * bts_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 200 void bts_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size);
198 uint8_t * bts_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size); 201 void btr_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
199 uint8_t * bts_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 202 void btr_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size);
200 uint8_t * bts_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t dst_disp, uint8_t size); 203 void btr_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
201 uint8_t * btr_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 204 void btr_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size);
202 uint8_t * btr_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size); 205 void btc_rr(code_info *code, uint8_t src, uint8_t dst, uint8_t size);
203 uint8_t * btr_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 206 void btc_rrdisp(code_info *code, uint8_t src, uint8_t dst_base, int32_t dst_disp, uint8_t size);
204 uint8_t * btr_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t dst_disp, uint8_t size); 207 void btc_ir(code_info *code, uint8_t val, uint8_t dst, uint8_t size);
205 uint8_t * btc_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t size); 208 void btc_irdisp(code_info *code, uint8_t val, uint8_t dst_base, int32_t dst_disp, uint8_t size);
206 uint8_t * btc_rrdisp8(uint8_t * out, uint8_t src, uint8_t dst_base, int8_t dst_disp, uint8_t size); 209 void jcc(code_info *code, uint8_t cc, code_ptr dest);
207 uint8_t * btc_ir(uint8_t * out, uint8_t val, uint8_t dst, uint8_t size); 210 void jmp(code_info *code, code_ptr dest);
208 uint8_t * btc_irdisp8(uint8_t * out, uint8_t val, uint8_t dst_base, int8_t dst_disp, uint8_t size); 211 void jmp_r(code_info *code, uint8_t dst);
209 uint8_t * jcc(uint8_t * out, uint8_t cc, uint8_t *dest); 212 void call(code_info *code, code_ptr fun);
210 uint8_t * jmp(uint8_t * out, uint8_t *dest); 213 void call_r(code_info *code, uint8_t dst);
211 uint8_t * jmp_r(uint8_t * out, uint8_t dst); 214 void retn(code_info *code);
212 uint8_t * call(uint8_t * out, uint8_t * fun); 215 void cdq(code_info *code);
213 uint8_t * call_r(uint8_t * out, uint8_t dst); 216 void loop(code_info *code, code_ptr dst);
214 uint8_t * retn(uint8_t * out);
215 uint8_t * cdq(uint8_t * out);
216 uint8_t * loop(uint8_t * out, uint8_t * dst);
217 217
218 #endif //GEN_X86_H_ 218 #endif //GEN_X86_H_
219 219