root / target-i386 / helper_template.h @ f8ed7070
History | View | Annotate | Download (8.7 kB)
1 | b6abf97d | bellard | /*
|
---|---|---|---|
2 | b6abf97d | bellard | * i386 helpers
|
3 | b6abf97d | bellard | *
|
4 | b6abf97d | bellard | * Copyright (c) 2008 Fabrice Bellard
|
5 | b6abf97d | bellard | *
|
6 | b6abf97d | bellard | * This library is free software; you can redistribute it and/or
|
7 | b6abf97d | bellard | * modify it under the terms of the GNU Lesser General Public
|
8 | b6abf97d | bellard | * License as published by the Free Software Foundation; either
|
9 | b6abf97d | bellard | * version 2 of the License, or (at your option) any later version.
|
10 | b6abf97d | bellard | *
|
11 | b6abf97d | bellard | * This library is distributed in the hope that it will be useful,
|
12 | b6abf97d | bellard | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13 | b6abf97d | bellard | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14 | b6abf97d | bellard | * Lesser General Public License for more details.
|
15 | b6abf97d | bellard | *
|
16 | b6abf97d | bellard | * You should have received a copy of the GNU Lesser General Public
|
17 | b6abf97d | bellard | * License along with this library; if not, write to the Free Software
|
18 | b6abf97d | bellard | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19 | b6abf97d | bellard | */
|
20 | b6abf97d | bellard | #define DATA_BITS (1 << (3 + SHIFT)) |
21 | b6abf97d | bellard | #define SHIFT_MASK (DATA_BITS - 1) |
22 | b6abf97d | bellard | #define SIGN_MASK (((target_ulong)1) << (DATA_BITS - 1)) |
23 | b6abf97d | bellard | #if DATA_BITS <= 32 |
24 | b6abf97d | bellard | #define SHIFT1_MASK 0x1f |
25 | b6abf97d | bellard | #else
|
26 | b6abf97d | bellard | #define SHIFT1_MASK 0x3f |
27 | b6abf97d | bellard | #endif
|
28 | b6abf97d | bellard | |
29 | b6abf97d | bellard | #if DATA_BITS == 8 |
30 | b6abf97d | bellard | #define SUFFIX b
|
31 | b6abf97d | bellard | #define DATA_TYPE uint8_t
|
32 | b6abf97d | bellard | #define DATA_STYPE int8_t
|
33 | b6abf97d | bellard | #define DATA_MASK 0xff |
34 | b6abf97d | bellard | #elif DATA_BITS == 16 |
35 | b6abf97d | bellard | #define SUFFIX w
|
36 | b6abf97d | bellard | #define DATA_TYPE uint16_t
|
37 | b6abf97d | bellard | #define DATA_STYPE int16_t
|
38 | b6abf97d | bellard | #define DATA_MASK 0xffff |
39 | b6abf97d | bellard | #elif DATA_BITS == 32 |
40 | b6abf97d | bellard | #define SUFFIX l
|
41 | b6abf97d | bellard | #define DATA_TYPE uint32_t
|
42 | b6abf97d | bellard | #define DATA_STYPE int32_t
|
43 | b6abf97d | bellard | #define DATA_MASK 0xffffffff |
44 | b6abf97d | bellard | #elif DATA_BITS == 64 |
45 | b6abf97d | bellard | #define SUFFIX q
|
46 | b6abf97d | bellard | #define DATA_TYPE uint64_t
|
47 | b6abf97d | bellard | #define DATA_STYPE int64_t
|
48 | b6abf97d | bellard | #define DATA_MASK 0xffffffffffffffffULL |
49 | b6abf97d | bellard | #else
|
50 | b6abf97d | bellard | #error unhandled operand size
|
51 | b6abf97d | bellard | #endif
|
52 | b6abf97d | bellard | |
53 | 07d2c595 | bellard | /* dynamic flags computation */
|
54 | 07d2c595 | bellard | |
55 | 07d2c595 | bellard | static int glue(compute_all_add, SUFFIX)(void) |
56 | 07d2c595 | bellard | { |
57 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
58 | 07d2c595 | bellard | target_long src1, src2; |
59 | 07d2c595 | bellard | src1 = CC_SRC; |
60 | 07d2c595 | bellard | src2 = CC_DST - CC_SRC; |
61 | 07d2c595 | bellard | cf = (DATA_TYPE)CC_DST < (DATA_TYPE)src1; |
62 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
63 | 07d2c595 | bellard | af = (CC_DST ^ src1 ^ src2) & 0x10;
|
64 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
65 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
66 | 07d2c595 | bellard | of = lshift((src1 ^ src2 ^ -1) & (src1 ^ CC_DST), 12 - DATA_BITS) & CC_O; |
67 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
68 | 07d2c595 | bellard | } |
69 | 07d2c595 | bellard | |
70 | 07d2c595 | bellard | static int glue(compute_c_add, SUFFIX)(void) |
71 | 07d2c595 | bellard | { |
72 | 07d2c595 | bellard | int cf;
|
73 | 07d2c595 | bellard | target_long src1; |
74 | 07d2c595 | bellard | src1 = CC_SRC; |
75 | 07d2c595 | bellard | cf = (DATA_TYPE)CC_DST < (DATA_TYPE)src1; |
76 | 07d2c595 | bellard | return cf;
|
77 | 07d2c595 | bellard | } |
78 | 07d2c595 | bellard | |
79 | 07d2c595 | bellard | static int glue(compute_all_adc, SUFFIX)(void) |
80 | 07d2c595 | bellard | { |
81 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
82 | 07d2c595 | bellard | target_long src1, src2; |
83 | 07d2c595 | bellard | src1 = CC_SRC; |
84 | 07d2c595 | bellard | src2 = CC_DST - CC_SRC - 1;
|
85 | 07d2c595 | bellard | cf = (DATA_TYPE)CC_DST <= (DATA_TYPE)src1; |
86 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
87 | 07d2c595 | bellard | af = (CC_DST ^ src1 ^ src2) & 0x10;
|
88 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
89 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
90 | 07d2c595 | bellard | of = lshift((src1 ^ src2 ^ -1) & (src1 ^ CC_DST), 12 - DATA_BITS) & CC_O; |
91 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
92 | 07d2c595 | bellard | } |
93 | 07d2c595 | bellard | |
94 | 07d2c595 | bellard | static int glue(compute_c_adc, SUFFIX)(void) |
95 | 07d2c595 | bellard | { |
96 | 07d2c595 | bellard | int cf;
|
97 | 07d2c595 | bellard | target_long src1; |
98 | 07d2c595 | bellard | src1 = CC_SRC; |
99 | 07d2c595 | bellard | cf = (DATA_TYPE)CC_DST <= (DATA_TYPE)src1; |
100 | 07d2c595 | bellard | return cf;
|
101 | 07d2c595 | bellard | } |
102 | 07d2c595 | bellard | |
103 | 07d2c595 | bellard | static int glue(compute_all_sub, SUFFIX)(void) |
104 | 07d2c595 | bellard | { |
105 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
106 | 07d2c595 | bellard | target_long src1, src2; |
107 | 07d2c595 | bellard | src1 = CC_DST + CC_SRC; |
108 | 07d2c595 | bellard | src2 = CC_SRC; |
109 | 07d2c595 | bellard | cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
110 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
111 | 07d2c595 | bellard | af = (CC_DST ^ src1 ^ src2) & 0x10;
|
112 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
113 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
114 | 07d2c595 | bellard | of = lshift((src1 ^ src2) & (src1 ^ CC_DST), 12 - DATA_BITS) & CC_O;
|
115 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
116 | 07d2c595 | bellard | } |
117 | 07d2c595 | bellard | |
118 | 07d2c595 | bellard | static int glue(compute_c_sub, SUFFIX)(void) |
119 | 07d2c595 | bellard | { |
120 | 07d2c595 | bellard | int cf;
|
121 | 07d2c595 | bellard | target_long src1, src2; |
122 | 07d2c595 | bellard | src1 = CC_DST + CC_SRC; |
123 | 07d2c595 | bellard | src2 = CC_SRC; |
124 | 07d2c595 | bellard | cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
125 | 07d2c595 | bellard | return cf;
|
126 | 07d2c595 | bellard | } |
127 | 07d2c595 | bellard | |
128 | 07d2c595 | bellard | static int glue(compute_all_sbb, SUFFIX)(void) |
129 | 07d2c595 | bellard | { |
130 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
131 | 07d2c595 | bellard | target_long src1, src2; |
132 | 07d2c595 | bellard | src1 = CC_DST + CC_SRC + 1;
|
133 | 07d2c595 | bellard | src2 = CC_SRC; |
134 | 07d2c595 | bellard | cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
135 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
136 | 07d2c595 | bellard | af = (CC_DST ^ src1 ^ src2) & 0x10;
|
137 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
138 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
139 | 07d2c595 | bellard | of = lshift((src1 ^ src2) & (src1 ^ CC_DST), 12 - DATA_BITS) & CC_O;
|
140 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
141 | 07d2c595 | bellard | } |
142 | 07d2c595 | bellard | |
143 | 07d2c595 | bellard | static int glue(compute_c_sbb, SUFFIX)(void) |
144 | 07d2c595 | bellard | { |
145 | 07d2c595 | bellard | int cf;
|
146 | 07d2c595 | bellard | target_long src1, src2; |
147 | 07d2c595 | bellard | src1 = CC_DST + CC_SRC + 1;
|
148 | 07d2c595 | bellard | src2 = CC_SRC; |
149 | 07d2c595 | bellard | cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
150 | 07d2c595 | bellard | return cf;
|
151 | 07d2c595 | bellard | } |
152 | 07d2c595 | bellard | |
153 | 07d2c595 | bellard | static int glue(compute_all_logic, SUFFIX)(void) |
154 | 07d2c595 | bellard | { |
155 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
156 | 07d2c595 | bellard | cf = 0;
|
157 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
158 | 07d2c595 | bellard | af = 0;
|
159 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
160 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
161 | 07d2c595 | bellard | of = 0;
|
162 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
163 | 07d2c595 | bellard | } |
164 | 07d2c595 | bellard | |
165 | 07d2c595 | bellard | static int glue(compute_c_logic, SUFFIX)(void) |
166 | 07d2c595 | bellard | { |
167 | 07d2c595 | bellard | return 0; |
168 | 07d2c595 | bellard | } |
169 | 07d2c595 | bellard | |
170 | 07d2c595 | bellard | static int glue(compute_all_inc, SUFFIX)(void) |
171 | 07d2c595 | bellard | { |
172 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
173 | 07d2c595 | bellard | target_long src1, src2; |
174 | 07d2c595 | bellard | src1 = CC_DST - 1;
|
175 | 07d2c595 | bellard | src2 = 1;
|
176 | 07d2c595 | bellard | cf = CC_SRC; |
177 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
178 | 07d2c595 | bellard | af = (CC_DST ^ src1 ^ src2) & 0x10;
|
179 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
180 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
181 | 07d2c595 | bellard | of = ((CC_DST & DATA_MASK) == SIGN_MASK) << 11;
|
182 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
183 | 07d2c595 | bellard | } |
184 | 07d2c595 | bellard | |
185 | 07d2c595 | bellard | #if DATA_BITS == 32 |
186 | 07d2c595 | bellard | static int glue(compute_c_inc, SUFFIX)(void) |
187 | 07d2c595 | bellard | { |
188 | 07d2c595 | bellard | return CC_SRC;
|
189 | 07d2c595 | bellard | } |
190 | 07d2c595 | bellard | #endif
|
191 | 07d2c595 | bellard | |
192 | 07d2c595 | bellard | static int glue(compute_all_dec, SUFFIX)(void) |
193 | 07d2c595 | bellard | { |
194 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
195 | 07d2c595 | bellard | target_long src1, src2; |
196 | 07d2c595 | bellard | src1 = CC_DST + 1;
|
197 | 07d2c595 | bellard | src2 = 1;
|
198 | 07d2c595 | bellard | cf = CC_SRC; |
199 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
200 | 07d2c595 | bellard | af = (CC_DST ^ src1 ^ src2) & 0x10;
|
201 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
202 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
203 | 07d2c595 | bellard | of = ((CC_DST & DATA_MASK) == ((target_ulong)SIGN_MASK - 1)) << 11; |
204 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
205 | 07d2c595 | bellard | } |
206 | 07d2c595 | bellard | |
207 | 07d2c595 | bellard | static int glue(compute_all_shl, SUFFIX)(void) |
208 | 07d2c595 | bellard | { |
209 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
210 | 07d2c595 | bellard | cf = (CC_SRC >> (DATA_BITS - 1)) & CC_C;
|
211 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
212 | 07d2c595 | bellard | af = 0; /* undefined */ |
213 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
214 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
215 | 07d2c595 | bellard | /* of is defined if shift count == 1 */
|
216 | 07d2c595 | bellard | of = lshift(CC_SRC ^ CC_DST, 12 - DATA_BITS) & CC_O;
|
217 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
218 | 07d2c595 | bellard | } |
219 | 07d2c595 | bellard | |
220 | 07d2c595 | bellard | static int glue(compute_c_shl, SUFFIX)(void) |
221 | 07d2c595 | bellard | { |
222 | 07d2c595 | bellard | return (CC_SRC >> (DATA_BITS - 1)) & CC_C; |
223 | 07d2c595 | bellard | } |
224 | 07d2c595 | bellard | |
225 | 07d2c595 | bellard | #if DATA_BITS == 32 |
226 | 07d2c595 | bellard | static int glue(compute_c_sar, SUFFIX)(void) |
227 | 07d2c595 | bellard | { |
228 | 07d2c595 | bellard | return CC_SRC & 1; |
229 | 07d2c595 | bellard | } |
230 | 07d2c595 | bellard | #endif
|
231 | 07d2c595 | bellard | |
232 | 07d2c595 | bellard | static int glue(compute_all_sar, SUFFIX)(void) |
233 | 07d2c595 | bellard | { |
234 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
235 | 07d2c595 | bellard | cf = CC_SRC & 1;
|
236 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
237 | 07d2c595 | bellard | af = 0; /* undefined */ |
238 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
239 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
240 | 07d2c595 | bellard | /* of is defined if shift count == 1 */
|
241 | 07d2c595 | bellard | of = lshift(CC_SRC ^ CC_DST, 12 - DATA_BITS) & CC_O;
|
242 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
243 | 07d2c595 | bellard | } |
244 | 07d2c595 | bellard | |
245 | 07d2c595 | bellard | #if DATA_BITS == 32 |
246 | 07d2c595 | bellard | static int glue(compute_c_mul, SUFFIX)(void) |
247 | 07d2c595 | bellard | { |
248 | 07d2c595 | bellard | int cf;
|
249 | 07d2c595 | bellard | cf = (CC_SRC != 0);
|
250 | 07d2c595 | bellard | return cf;
|
251 | 07d2c595 | bellard | } |
252 | 07d2c595 | bellard | #endif
|
253 | 07d2c595 | bellard | |
254 | 07d2c595 | bellard | /* NOTE: we compute the flags like the P4. On olders CPUs, only OF and
|
255 | 07d2c595 | bellard | CF are modified and it is slower to do that. */
|
256 | 07d2c595 | bellard | static int glue(compute_all_mul, SUFFIX)(void) |
257 | 07d2c595 | bellard | { |
258 | 07d2c595 | bellard | int cf, pf, af, zf, sf, of;
|
259 | 07d2c595 | bellard | cf = (CC_SRC != 0);
|
260 | 07d2c595 | bellard | pf = parity_table[(uint8_t)CC_DST]; |
261 | 07d2c595 | bellard | af = 0; /* undefined */ |
262 | 07d2c595 | bellard | zf = ((DATA_TYPE)CC_DST == 0) << 6; |
263 | 07d2c595 | bellard | sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
264 | 07d2c595 | bellard | of = cf << 11;
|
265 | 07d2c595 | bellard | return cf | pf | af | zf | sf | of;
|
266 | 07d2c595 | bellard | } |
267 | 07d2c595 | bellard | |
268 | 07d2c595 | bellard | /* shifts */
|
269 | 07d2c595 | bellard | |
270 | b6abf97d | bellard | target_ulong glue(helper_rcl, SUFFIX)(target_ulong t0, target_ulong t1) |
271 | b6abf97d | bellard | { |
272 | b6abf97d | bellard | int count, eflags;
|
273 | b6abf97d | bellard | target_ulong src; |
274 | b6abf97d | bellard | target_long res; |
275 | b6abf97d | bellard | |
276 | b6abf97d | bellard | count = t1 & SHIFT1_MASK; |
277 | b6abf97d | bellard | #if DATA_BITS == 16 |
278 | b6abf97d | bellard | count = rclw_table[count]; |
279 | b6abf97d | bellard | #elif DATA_BITS == 8 |
280 | b6abf97d | bellard | count = rclb_table[count]; |
281 | b6abf97d | bellard | #endif
|
282 | b6abf97d | bellard | if (count) {
|
283 | b6abf97d | bellard | eflags = cc_table[CC_OP].compute_all(); |
284 | b6abf97d | bellard | t0 &= DATA_MASK; |
285 | b6abf97d | bellard | src = t0; |
286 | b6abf97d | bellard | res = (t0 << count) | ((target_ulong)(eflags & CC_C) << (count - 1));
|
287 | b6abf97d | bellard | if (count > 1) |
288 | b6abf97d | bellard | res |= t0 >> (DATA_BITS + 1 - count);
|
289 | b6abf97d | bellard | t0 = res; |
290 | 1e4840bf | bellard | env->cc_tmp = (eflags & ~(CC_C | CC_O)) | |
291 | b6abf97d | bellard | (lshift(src ^ t0, 11 - (DATA_BITS - 1)) & CC_O) | |
292 | b6abf97d | bellard | ((src >> (DATA_BITS - count)) & CC_C); |
293 | b6abf97d | bellard | } else {
|
294 | 1e4840bf | bellard | env->cc_tmp = -1;
|
295 | b6abf97d | bellard | } |
296 | b6abf97d | bellard | return t0;
|
297 | b6abf97d | bellard | } |
298 | b6abf97d | bellard | |
299 | b6abf97d | bellard | target_ulong glue(helper_rcr, SUFFIX)(target_ulong t0, target_ulong t1) |
300 | b6abf97d | bellard | { |
301 | b6abf97d | bellard | int count, eflags;
|
302 | b6abf97d | bellard | target_ulong src; |
303 | b6abf97d | bellard | target_long res; |
304 | b6abf97d | bellard | |
305 | b6abf97d | bellard | count = t1 & SHIFT1_MASK; |
306 | b6abf97d | bellard | #if DATA_BITS == 16 |
307 | b6abf97d | bellard | count = rclw_table[count]; |
308 | b6abf97d | bellard | #elif DATA_BITS == 8 |
309 | b6abf97d | bellard | count = rclb_table[count]; |
310 | b6abf97d | bellard | #endif
|
311 | b6abf97d | bellard | if (count) {
|
312 | b6abf97d | bellard | eflags = cc_table[CC_OP].compute_all(); |
313 | b6abf97d | bellard | t0 &= DATA_MASK; |
314 | b6abf97d | bellard | src = t0; |
315 | b6abf97d | bellard | res = (t0 >> count) | ((target_ulong)(eflags & CC_C) << (DATA_BITS - count)); |
316 | b6abf97d | bellard | if (count > 1) |
317 | b6abf97d | bellard | res |= t0 << (DATA_BITS + 1 - count);
|
318 | b6abf97d | bellard | t0 = res; |
319 | 1e4840bf | bellard | env->cc_tmp = (eflags & ~(CC_C | CC_O)) | |
320 | b6abf97d | bellard | (lshift(src ^ t0, 11 - (DATA_BITS - 1)) & CC_O) | |
321 | b6abf97d | bellard | ((src >> (count - 1)) & CC_C);
|
322 | b6abf97d | bellard | } else {
|
323 | 1e4840bf | bellard | env->cc_tmp = -1;
|
324 | b6abf97d | bellard | } |
325 | b6abf97d | bellard | return t0;
|
326 | b6abf97d | bellard | } |
327 | b6abf97d | bellard | |
328 | b6abf97d | bellard | #undef DATA_BITS
|
329 | b6abf97d | bellard | #undef SHIFT_MASK
|
330 | b6abf97d | bellard | #undef SHIFT1_MASK
|
331 | b6abf97d | bellard | #undef SIGN_MASK
|
332 | b6abf97d | bellard | #undef DATA_TYPE
|
333 | b6abf97d | bellard | #undef DATA_STYPE
|
334 | b6abf97d | bellard | #undef DATA_MASK
|
335 | b6abf97d | bellard | #undef SUFFIX |