Commit a699b51a5afba1cd6e6ecdd7ec32c368febc2cc4
1 parent
dc5acc23
Convert disas_dsp_insn not use cpu_T.
Signed-off-by: Filip Navara <filip.navara@gmail.com>
Showing
1 changed file
with
20 additions
and
39 deletions
target-arm/translate.c
| ... | ... | @@ -1302,21 +1302,6 @@ IWMMXT_OP_ENV(packsw) |
| 1302 | 1302 | IWMMXT_OP_ENV(packsl) |
| 1303 | 1303 | IWMMXT_OP_ENV(packsq) |
| 1304 | 1304 | |
| 1305 | -static inline void gen_op_iwmmxt_muladdsl_M0_T0_T1(void) | |
| 1306 | -{ | |
| 1307 | - gen_helper_iwmmxt_muladdsl(cpu_M0, cpu_M0, cpu_T[0], cpu_T[1]); | |
| 1308 | -} | |
| 1309 | - | |
| 1310 | -static inline void gen_op_iwmmxt_muladdsw_M0_T0_T1(void) | |
| 1311 | -{ | |
| 1312 | - gen_helper_iwmmxt_muladdsw(cpu_M0, cpu_M0, cpu_T[0], cpu_T[1]); | |
| 1313 | -} | |
| 1314 | - | |
| 1315 | -static inline void gen_op_iwmmxt_muladdswl_M0_T0_T1(void) | |
| 1316 | -{ | |
| 1317 | - gen_helper_iwmmxt_muladdswl(cpu_M0, cpu_M0, cpu_T[0], cpu_T[1]); | |
| 1318 | -} | |
| 1319 | - | |
| 1320 | 1305 | static inline void gen_op_iwmmxt_align_M0_T0_wRn(int rn) |
| 1321 | 1306 | { |
| 1322 | 1307 | iwmmxt_load_reg(cpu_V1, rn); |
| ... | ... | @@ -1381,7 +1366,6 @@ static inline void gen_op_iwmmxt_addl_M0_wRn(int rn) |
| 1381 | 1366 | tcg_gen_add_i64(cpu_M0, cpu_M0, cpu_V1); |
| 1382 | 1367 | } |
| 1383 | 1368 | |
| 1384 | - | |
| 1385 | 1369 | static void gen_iwmmxt_movl_T0_T1_wRn(int rn) |
| 1386 | 1370 | { |
| 1387 | 1371 | iwmmxt_load_reg(cpu_V0, rn); |
| ... | ... | @@ -2382,12 +2366,12 @@ static int disas_iwmmxt_insn(CPUState *env, DisasContext *s, uint32_t insn) |
| 2382 | 2366 | case 0x0: /* TMIA */ |
| 2383 | 2367 | gen_movl_T0_reg(s, rd0); |
| 2384 | 2368 | gen_movl_T1_reg(s, rd1); |
| 2385 | - gen_op_iwmmxt_muladdsl_M0_T0_T1(); | |
| 2369 | + gen_helper_iwmmxt_muladdsl(cpu_M0, cpu_M0, cpu_T[0], cpu_T[1]); | |
| 2386 | 2370 | break; |
| 2387 | 2371 | case 0x8: /* TMIAPH */ |
| 2388 | 2372 | gen_movl_T0_reg(s, rd0); |
| 2389 | 2373 | gen_movl_T1_reg(s, rd1); |
| 2390 | - gen_op_iwmmxt_muladdsw_M0_T0_T1(); | |
| 2374 | + gen_helper_iwmmxt_muladdsw(cpu_M0, cpu_M0, cpu_T[0], cpu_T[1]); | |
| 2391 | 2375 | break; |
| 2392 | 2376 | case 0xc: case 0xd: case 0xe: case 0xf: /* TMIAxy */ |
| 2393 | 2377 | gen_movl_T1_reg(s, rd0); |
| ... | ... | @@ -2397,7 +2381,7 @@ static int disas_iwmmxt_insn(CPUState *env, DisasContext *s, uint32_t insn) |
| 2397 | 2381 | gen_movl_T1_reg(s, rd1); |
| 2398 | 2382 | if (insn & (1 << 17)) |
| 2399 | 2383 | gen_op_shrl_T1_im(16); |
| 2400 | - gen_op_iwmmxt_muladdswl_M0_T0_T1(); | |
| 2384 | + gen_helper_iwmmxt_muladdswl(cpu_M0, cpu_M0, cpu_T[0], cpu_T[1]); | |
| 2401 | 2385 | break; |
| 2402 | 2386 | default: |
| 2403 | 2387 | return 1; |
| ... | ... | @@ -2417,6 +2401,7 @@ static int disas_iwmmxt_insn(CPUState *env, DisasContext *s, uint32_t insn) |
| 2417 | 2401 | static int disas_dsp_insn(CPUState *env, DisasContext *s, uint32_t insn) |
| 2418 | 2402 | { |
| 2419 | 2403 | int acc, rd0, rd1, rdhi, rdlo; |
| 2404 | + TCGv tmp, tmp2; | |
| 2420 | 2405 | |
| 2421 | 2406 | if ((insn & 0x0ff00f10) == 0x0e200010) { |
| 2422 | 2407 | /* Multiply with Internal Accumulate Format */ |
| ... | ... | @@ -2427,33 +2412,30 @@ static int disas_dsp_insn(CPUState *env, DisasContext *s, uint32_t insn) |
| 2427 | 2412 | if (acc != 0) |
| 2428 | 2413 | return 1; |
| 2429 | 2414 | |
| 2415 | + tmp = load_reg(s, rd0); | |
| 2416 | + tmp2 = load_reg(s, rd1); | |
| 2430 | 2417 | switch ((insn >> 16) & 0xf) { |
| 2431 | 2418 | case 0x0: /* MIA */ |
| 2432 | - gen_movl_T0_reg(s, rd0); | |
| 2433 | - gen_movl_T1_reg(s, rd1); | |
| 2434 | - gen_op_iwmmxt_muladdsl_M0_T0_T1(); | |
| 2419 | + gen_helper_iwmmxt_muladdsl(cpu_M0, cpu_M0, tmp, tmp2); | |
| 2435 | 2420 | break; |
| 2436 | 2421 | case 0x8: /* MIAPH */ |
| 2437 | - gen_movl_T0_reg(s, rd0); | |
| 2438 | - gen_movl_T1_reg(s, rd1); | |
| 2439 | - gen_op_iwmmxt_muladdsw_M0_T0_T1(); | |
| 2422 | + gen_helper_iwmmxt_muladdsw(cpu_M0, cpu_M0, tmp, tmp2); | |
| 2440 | 2423 | break; |
| 2441 | 2424 | case 0xc: /* MIABB */ |
| 2442 | 2425 | case 0xd: /* MIABT */ |
| 2443 | 2426 | case 0xe: /* MIATB */ |
| 2444 | 2427 | case 0xf: /* MIATT */ |
| 2445 | - gen_movl_T1_reg(s, rd0); | |
| 2446 | 2428 | if (insn & (1 << 16)) |
| 2447 | - gen_op_shrl_T1_im(16); | |
| 2448 | - gen_op_movl_T0_T1(); | |
| 2449 | - gen_movl_T1_reg(s, rd1); | |
| 2429 | + tcg_gen_shri_i32(tmp, tmp, 16); | |
| 2450 | 2430 | if (insn & (1 << 17)) |
| 2451 | - gen_op_shrl_T1_im(16); | |
| 2452 | - gen_op_iwmmxt_muladdswl_M0_T0_T1(); | |
| 2431 | + tcg_gen_shri_i32(tmp2, tmp2, 16); | |
| 2432 | + gen_helper_iwmmxt_muladdswl(cpu_M0, cpu_M0, tmp, tmp2); | |
| 2453 | 2433 | break; |
| 2454 | 2434 | default: |
| 2455 | 2435 | return 1; |
| 2456 | 2436 | } |
| 2437 | + dead_tmp(tmp2); | |
| 2438 | + dead_tmp(tmp); | |
| 2457 | 2439 | |
| 2458 | 2440 | gen_op_iwmmxt_movq_wRn_M0(acc); |
| 2459 | 2441 | return 0; |
| ... | ... | @@ -2469,15 +2451,14 @@ static int disas_dsp_insn(CPUState *env, DisasContext *s, uint32_t insn) |
| 2469 | 2451 | return 1; |
| 2470 | 2452 | |
| 2471 | 2453 | if (insn & ARM_CP_RW_BIT) { /* MRA */ |
| 2472 | - gen_iwmmxt_movl_T0_T1_wRn(acc); | |
| 2473 | - gen_movl_reg_T0(s, rdlo); | |
| 2474 | - gen_op_movl_T0_im((1 << (40 - 32)) - 1); | |
| 2475 | - gen_op_andl_T0_T1(); | |
| 2476 | - gen_movl_reg_T0(s, rdhi); | |
| 2454 | + iwmmxt_load_reg(cpu_V0, acc); | |
| 2455 | + tcg_gen_trunc_i64_i32(cpu_R[rdlo], cpu_V0); | |
| 2456 | + tcg_gen_shri_i64(cpu_V0, cpu_V0, 32); | |
| 2457 | + tcg_gen_trunc_i64_i32(cpu_R[rdhi], cpu_V0); | |
| 2458 | + tcg_gen_andi_i32(cpu_R[rdhi], cpu_R[rdhi], (1 << (40 - 32)) - 1); | |
| 2477 | 2459 | } else { /* MAR */ |
| 2478 | - gen_movl_T0_reg(s, rdlo); | |
| 2479 | - gen_movl_T1_reg(s, rdhi); | |
| 2480 | - gen_iwmmxt_movl_wRn_T0_T1(acc); | |
| 2460 | + tcg_gen_concat_i32_i64(cpu_V0, cpu_R[rdlo], cpu_R[rdhi]); | |
| 2461 | + iwmmxt_store_reg(cpu_V0, acc); | |
| 2481 | 2462 | } |
| 2482 | 2463 | return 0; |
| 2483 | 2464 | } | ... | ... |