Mercurial > repos > blastem
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 |