Commit f8422f52fd633bb33e83e686e29c158bde4a3623
1 parent
f65fb109
More helper types, rearrange generic definitions
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3988 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
109 additions
and
64 deletions
target-i386/translate.c
| ... | ... | @@ -57,70 +57,6 @@ |
| 57 | 57 | |
| 58 | 58 | //#define MACRO_TEST 1 |
| 59 | 59 | |
| 60 | -#ifdef TARGET_X86_64 | |
| 61 | -#define TCG_TYPE_TL TCG_TYPE_I64 | |
| 62 | -#define tcg_gen_movi_tl tcg_gen_movi_i64 | |
| 63 | -#define tcg_gen_mov_tl tcg_gen_mov_i64 | |
| 64 | -#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64 | |
| 65 | -#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64 | |
| 66 | -#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64 | |
| 67 | -#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64 | |
| 68 | -#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64 | |
| 69 | -#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64 | |
| 70 | -#define tcg_gen_ld_tl tcg_gen_ld_i64 | |
| 71 | -#define tcg_gen_st8_tl tcg_gen_st8_i64 | |
| 72 | -#define tcg_gen_st16_tl tcg_gen_st16_i64 | |
| 73 | -#define tcg_gen_st32_tl tcg_gen_st32_i64 | |
| 74 | -#define tcg_gen_st_tl tcg_gen_st_i64 | |
| 75 | -#define tcg_gen_add_tl tcg_gen_add_i64 | |
| 76 | -#define tcg_gen_addi_tl tcg_gen_addi_i64 | |
| 77 | -#define tcg_gen_sub_tl tcg_gen_sub_i64 | |
| 78 | -#define tcg_gen_subi_tl tcg_gen_subi_i64 | |
| 79 | -#define tcg_gen_and_tl tcg_gen_and_i64 | |
| 80 | -#define tcg_gen_andi_tl tcg_gen_andi_i64 | |
| 81 | -#define tcg_gen_or_tl tcg_gen_or_i64 | |
| 82 | -#define tcg_gen_ori_tl tcg_gen_ori_i64 | |
| 83 | -#define tcg_gen_xor_tl tcg_gen_xor_i64 | |
| 84 | -#define tcg_gen_xori_tl tcg_gen_xori_i64 | |
| 85 | -#define tcg_gen_shl_tl tcg_gen_shl_i64 | |
| 86 | -#define tcg_gen_shli_tl tcg_gen_shli_i64 | |
| 87 | -#define tcg_gen_shr_tl tcg_gen_shr_i64 | |
| 88 | -#define tcg_gen_shri_tl tcg_gen_shri_i64 | |
| 89 | -#define tcg_gen_sar_tl tcg_gen_sar_i64 | |
| 90 | -#define tcg_gen_sari_tl tcg_gen_sari_i64 | |
| 91 | -#else | |
| 92 | -#define TCG_TYPE_TL TCG_TYPE_I32 | |
| 93 | -#define tcg_gen_movi_tl tcg_gen_movi_i32 | |
| 94 | -#define tcg_gen_mov_tl tcg_gen_mov_i32 | |
| 95 | -#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32 | |
| 96 | -#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32 | |
| 97 | -#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32 | |
| 98 | -#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32 | |
| 99 | -#define tcg_gen_ld32u_tl tcg_gen_ld_i32 | |
| 100 | -#define tcg_gen_ld32s_tl tcg_gen_ld_i32 | |
| 101 | -#define tcg_gen_ld_tl tcg_gen_ld_i32 | |
| 102 | -#define tcg_gen_st8_tl tcg_gen_st8_i32 | |
| 103 | -#define tcg_gen_st16_tl tcg_gen_st16_i32 | |
| 104 | -#define tcg_gen_st32_tl tcg_gen_st_i32 | |
| 105 | -#define tcg_gen_st_tl tcg_gen_st_i32 | |
| 106 | -#define tcg_gen_add_tl tcg_gen_add_i32 | |
| 107 | -#define tcg_gen_addi_tl tcg_gen_addi_i32 | |
| 108 | -#define tcg_gen_sub_tl tcg_gen_sub_i32 | |
| 109 | -#define tcg_gen_subi_tl tcg_gen_subi_i32 | |
| 110 | -#define tcg_gen_and_tl tcg_gen_and_i32 | |
| 111 | -#define tcg_gen_andi_tl tcg_gen_andi_i32 | |
| 112 | -#define tcg_gen_or_tl tcg_gen_or_i32 | |
| 113 | -#define tcg_gen_ori_tl tcg_gen_ori_i32 | |
| 114 | -#define tcg_gen_xor_tl tcg_gen_xor_i32 | |
| 115 | -#define tcg_gen_xori_tl tcg_gen_xori_i32 | |
| 116 | -#define tcg_gen_shl_tl tcg_gen_shl_i32 | |
| 117 | -#define tcg_gen_shli_tl tcg_gen_shli_i32 | |
| 118 | -#define tcg_gen_shr_tl tcg_gen_shr_i32 | |
| 119 | -#define tcg_gen_shri_tl tcg_gen_shri_i32 | |
| 120 | -#define tcg_gen_sar_tl tcg_gen_sar_i32 | |
| 121 | -#define tcg_gen_sari_tl tcg_gen_sari_i32 | |
| 122 | -#endif | |
| 123 | - | |
| 124 | 60 | /* global register indexes */ |
| 125 | 61 | static TCGv cpu_env, cpu_T[2], cpu_A0; |
| 126 | 62 | /* local register indexes (only used inside old micro ops) */ | ... | ... |
tcg/tcg-op.h
| ... | ... | @@ -192,6 +192,33 @@ static inline void tcg_gen_helper_0_2(void *func, TCGv arg1, TCGv arg2) |
| 192 | 192 | 0, NULL, 2, args); |
| 193 | 193 | } |
| 194 | 194 | |
| 195 | +static inline void tcg_gen_helper_0_4(void *func, TCGv arg1, TCGv arg2, | |
| 196 | + TCGv arg3, TCGv arg4) | |
| 197 | +{ | |
| 198 | + TCGv args[4]; | |
| 199 | + args[0] = arg1; | |
| 200 | + args[1] = arg2; | |
| 201 | + args[2] = arg3; | |
| 202 | + args[3] = arg4; | |
| 203 | + tcg_gen_call(&tcg_ctx, | |
| 204 | + tcg_const_ptr((tcg_target_long)func), TCG_HELPER_CALL_FLAGS, | |
| 205 | + 0, NULL, 4, args); | |
| 206 | +} | |
| 207 | + | |
| 208 | +static inline void tcg_gen_helper_1_0(void *func, TCGv ret) | |
| 209 | +{ | |
| 210 | + tcg_gen_call(&tcg_ctx, | |
| 211 | + tcg_const_ptr((tcg_target_long)func), TCG_HELPER_CALL_FLAGS, | |
| 212 | + 1, &ret, 0, NULL); | |
| 213 | +} | |
| 214 | + | |
| 215 | +static inline void tcg_gen_helper_1_1(void *func, TCGv ret, TCGv arg1) | |
| 216 | +{ | |
| 217 | + tcg_gen_call(&tcg_ctx, | |
| 218 | + tcg_const_ptr((tcg_target_long)func), TCG_HELPER_CALL_FLAGS, | |
| 219 | + 1, &ret, 1, &arg1); | |
| 220 | +} | |
| 221 | + | |
| 195 | 222 | static inline void tcg_gen_helper_1_2(void *func, TCGv ret, |
| 196 | 223 | TCGv arg1, TCGv arg2) |
| 197 | 224 | { |
| ... | ... | @@ -203,6 +230,20 @@ static inline void tcg_gen_helper_1_2(void *func, TCGv ret, |
| 203 | 230 | 1, &ret, 2, args); |
| 204 | 231 | } |
| 205 | 232 | |
| 233 | +static inline void tcg_gen_helper_1_4(void *func, TCGv ret, | |
| 234 | + TCGv arg1, TCGv arg2, TCGv arg3, | |
| 235 | + TCGv arg4) | |
| 236 | +{ | |
| 237 | + TCGv args[4]; | |
| 238 | + args[0] = arg1; | |
| 239 | + args[1] = arg2; | |
| 240 | + args[2] = arg3; | |
| 241 | + args[3] = arg4; | |
| 242 | + tcg_gen_call(&tcg_ctx, | |
| 243 | + tcg_const_ptr((tcg_target_long)func), TCG_HELPER_CALL_FLAGS, | |
| 244 | + 1, &ret, 4, args); | |
| 245 | +} | |
| 246 | + | |
| 206 | 247 | /* 32 bit ops */ |
| 207 | 248 | |
| 208 | 249 | static inline void tcg_gen_ld8u_i32(TCGv ret, TCGv arg2, tcg_target_long offset) |
| ... | ... | @@ -1222,6 +1263,8 @@ static inline void tcg_gen_qemu_st64(TCGv arg, TCGv addr, int mem_index) |
| 1222 | 1263 | #endif |
| 1223 | 1264 | } |
| 1224 | 1265 | |
| 1266 | +#define tcg_gen_ld_ptr tcg_gen_ld_i64 | |
| 1267 | + | |
| 1225 | 1268 | #else /* TCG_TARGET_REG_BITS == 32 */ |
| 1226 | 1269 | |
| 1227 | 1270 | static inline void tcg_gen_qemu_ld8u(TCGv ret, TCGv addr, int mem_index) |
| ... | ... | @@ -1279,4 +1322,70 @@ static inline void tcg_gen_qemu_st64(TCGv arg, TCGv addr, int mem_index) |
| 1279 | 1322 | tcg_gen_op3i(INDEX_op_qemu_st64, arg, addr, mem_index); |
| 1280 | 1323 | } |
| 1281 | 1324 | |
| 1325 | +#define tcg_gen_ld_ptr tcg_gen_ld_i32 | |
| 1326 | + | |
| 1282 | 1327 | #endif /* TCG_TARGET_REG_BITS != 32 */ |
| 1328 | + | |
| 1329 | +#if TARGET_LONG_BITS == 64 | |
| 1330 | +#define TCG_TYPE_TL TCG_TYPE_I64 | |
| 1331 | +#define tcg_gen_movi_tl tcg_gen_movi_i64 | |
| 1332 | +#define tcg_gen_mov_tl tcg_gen_mov_i64 | |
| 1333 | +#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64 | |
| 1334 | +#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64 | |
| 1335 | +#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64 | |
| 1336 | +#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64 | |
| 1337 | +#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64 | |
| 1338 | +#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64 | |
| 1339 | +#define tcg_gen_ld_tl tcg_gen_ld_i64 | |
| 1340 | +#define tcg_gen_st8_tl tcg_gen_st8_i64 | |
| 1341 | +#define tcg_gen_st16_tl tcg_gen_st16_i64 | |
| 1342 | +#define tcg_gen_st32_tl tcg_gen_st32_i64 | |
| 1343 | +#define tcg_gen_st_tl tcg_gen_st_i64 | |
| 1344 | +#define tcg_gen_add_tl tcg_gen_add_i64 | |
| 1345 | +#define tcg_gen_addi_tl tcg_gen_addi_i64 | |
| 1346 | +#define tcg_gen_sub_tl tcg_gen_sub_i64 | |
| 1347 | +#define tcg_gen_subi_tl tcg_gen_subi_i64 | |
| 1348 | +#define tcg_gen_and_tl tcg_gen_and_i64 | |
| 1349 | +#define tcg_gen_andi_tl tcg_gen_andi_i64 | |
| 1350 | +#define tcg_gen_or_tl tcg_gen_or_i64 | |
| 1351 | +#define tcg_gen_ori_tl tcg_gen_ori_i64 | |
| 1352 | +#define tcg_gen_xor_tl tcg_gen_xor_i64 | |
| 1353 | +#define tcg_gen_xori_tl tcg_gen_xori_i64 | |
| 1354 | +#define tcg_gen_shl_tl tcg_gen_shl_i64 | |
| 1355 | +#define tcg_gen_shli_tl tcg_gen_shli_i64 | |
| 1356 | +#define tcg_gen_shr_tl tcg_gen_shr_i64 | |
| 1357 | +#define tcg_gen_shri_tl tcg_gen_shri_i64 | |
| 1358 | +#define tcg_gen_sar_tl tcg_gen_sar_i64 | |
| 1359 | +#define tcg_gen_sari_tl tcg_gen_sari_i64 | |
| 1360 | +#else | |
| 1361 | +#define TCG_TYPE_TL TCG_TYPE_I32 | |
| 1362 | +#define tcg_gen_movi_tl tcg_gen_movi_i32 | |
| 1363 | +#define tcg_gen_mov_tl tcg_gen_mov_i32 | |
| 1364 | +#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32 | |
| 1365 | +#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32 | |
| 1366 | +#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32 | |
| 1367 | +#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32 | |
| 1368 | +#define tcg_gen_ld32u_tl tcg_gen_ld_i32 | |
| 1369 | +#define tcg_gen_ld32s_tl tcg_gen_ld_i32 | |
| 1370 | +#define tcg_gen_ld_tl tcg_gen_ld_i32 | |
| 1371 | +#define tcg_gen_st8_tl tcg_gen_st8_i32 | |
| 1372 | +#define tcg_gen_st16_tl tcg_gen_st16_i32 | |
| 1373 | +#define tcg_gen_st32_tl tcg_gen_st_i32 | |
| 1374 | +#define tcg_gen_st_tl tcg_gen_st_i32 | |
| 1375 | +#define tcg_gen_add_tl tcg_gen_add_i32 | |
| 1376 | +#define tcg_gen_addi_tl tcg_gen_addi_i32 | |
| 1377 | +#define tcg_gen_sub_tl tcg_gen_sub_i32 | |
| 1378 | +#define tcg_gen_subi_tl tcg_gen_subi_i32 | |
| 1379 | +#define tcg_gen_and_tl tcg_gen_and_i32 | |
| 1380 | +#define tcg_gen_andi_tl tcg_gen_andi_i32 | |
| 1381 | +#define tcg_gen_or_tl tcg_gen_or_i32 | |
| 1382 | +#define tcg_gen_ori_tl tcg_gen_ori_i32 | |
| 1383 | +#define tcg_gen_xor_tl tcg_gen_xor_i32 | |
| 1384 | +#define tcg_gen_xori_tl tcg_gen_xori_i32 | |
| 1385 | +#define tcg_gen_shl_tl tcg_gen_shl_i32 | |
| 1386 | +#define tcg_gen_shli_tl tcg_gen_shli_i32 | |
| 1387 | +#define tcg_gen_shr_tl tcg_gen_shr_i32 | |
| 1388 | +#define tcg_gen_shri_tl tcg_gen_shri_i32 | |
| 1389 | +#define tcg_gen_sar_tl tcg_gen_sar_i32 | |
| 1390 | +#define tcg_gen_sari_tl tcg_gen_sari_i32 | |
| 1391 | +#endif | ... | ... |