Commit 2fdbad255e73c7422dacd43bd0d2e627270104de
1 parent
9507fb52
TCG fixes for target-mips
This patch fixes TCG errors reported on the MIPS target when TCG_DEBUG is enabled. Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> Acked-by: Thiemo Seufer <ths@networkno.de> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5164 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
27 additions
and
26 deletions
target-mips/translate.c
| @@ -427,7 +427,8 @@ static TCGv cpu_env, bcond, btarget, current_fpu; | @@ -427,7 +427,8 @@ static TCGv cpu_env, bcond, btarget, current_fpu; | ||
| 427 | 427 | ||
| 428 | #include "gen-icount.h" | 428 | #include "gen-icount.h" |
| 429 | 429 | ||
| 430 | -static inline void tcg_gen_helper_0_i(void *func, TCGv arg) | 430 | +static inline void tcg_gen_helper_0_i(void *func, uint32_t arg) |
| 431 | + | ||
| 431 | { | 432 | { |
| 432 | TCGv tmp = tcg_const_i32(arg); | 433 | TCGv tmp = tcg_const_i32(arg); |
| 433 | 434 | ||
| @@ -435,7 +436,7 @@ static inline void tcg_gen_helper_0_i(void *func, TCGv arg) | @@ -435,7 +436,7 @@ static inline void tcg_gen_helper_0_i(void *func, TCGv arg) | ||
| 435 | tcg_temp_free(tmp); | 436 | tcg_temp_free(tmp); |
| 436 | } | 437 | } |
| 437 | 438 | ||
| 438 | -static inline void tcg_gen_helper_0_ii(void *func, TCGv arg1, TCGv arg2) | 439 | +static inline void tcg_gen_helper_0_ii(void *func, uint32_t arg1, uint32_t arg2) |
| 439 | { | 440 | { |
| 440 | TCGv tmp1 = tcg_const_i32(arg1); | 441 | TCGv tmp1 = tcg_const_i32(arg1); |
| 441 | TCGv tmp2 = tcg_const_i32(arg2); | 442 | TCGv tmp2 = tcg_const_i32(arg2); |
| @@ -445,7 +446,7 @@ static inline void tcg_gen_helper_0_ii(void *func, TCGv arg1, TCGv arg2) | @@ -445,7 +446,7 @@ static inline void tcg_gen_helper_0_ii(void *func, TCGv arg1, TCGv arg2) | ||
| 445 | tcg_temp_free(tmp2); | 446 | tcg_temp_free(tmp2); |
| 446 | } | 447 | } |
| 447 | 448 | ||
| 448 | -static inline void tcg_gen_helper_0_1i(void *func, TCGv arg1, TCGv arg2) | 449 | +static inline void tcg_gen_helper_0_1i(void *func, TCGv arg1, uint32_t arg2) |
| 449 | { | 450 | { |
| 450 | TCGv tmp = tcg_const_i32(arg2); | 451 | TCGv tmp = tcg_const_i32(arg2); |
| 451 | 452 | ||
| @@ -453,7 +454,7 @@ static inline void tcg_gen_helper_0_1i(void *func, TCGv arg1, TCGv arg2) | @@ -453,7 +454,7 @@ static inline void tcg_gen_helper_0_1i(void *func, TCGv arg1, TCGv arg2) | ||
| 453 | tcg_temp_free(tmp); | 454 | tcg_temp_free(tmp); |
| 454 | } | 455 | } |
| 455 | 456 | ||
| 456 | -static inline void tcg_gen_helper_0_2i(void *func, TCGv arg1, TCGv arg2, TCGv arg3) | 457 | +static inline void tcg_gen_helper_0_2i(void *func, TCGv arg1, TCGv arg2, uint32_t arg3) |
| 457 | { | 458 | { |
| 458 | TCGv tmp = tcg_const_i32(arg3); | 459 | TCGv tmp = tcg_const_i32(arg3); |
| 459 | 460 | ||
| @@ -461,7 +462,7 @@ static inline void tcg_gen_helper_0_2i(void *func, TCGv arg1, TCGv arg2, TCGv ar | @@ -461,7 +462,7 @@ static inline void tcg_gen_helper_0_2i(void *func, TCGv arg1, TCGv arg2, TCGv ar | ||
| 461 | tcg_temp_free(tmp); | 462 | tcg_temp_free(tmp); |
| 462 | } | 463 | } |
| 463 | 464 | ||
| 464 | -static inline void tcg_gen_helper_0_1ii(void *func, TCGv arg1, TCGv arg2, TCGv arg3) | 465 | +static inline void tcg_gen_helper_0_1ii(void *func, TCGv arg1, uint32_t arg2, uint32_t arg3) |
| 465 | { | 466 | { |
| 466 | TCGv tmp1 = tcg_const_i32(arg2); | 467 | TCGv tmp1 = tcg_const_i32(arg2); |
| 467 | TCGv tmp2 = tcg_const_i32(arg3); | 468 | TCGv tmp2 = tcg_const_i32(arg3); |
| @@ -471,7 +472,7 @@ static inline void tcg_gen_helper_0_1ii(void *func, TCGv arg1, TCGv arg2, TCGv a | @@ -471,7 +472,7 @@ static inline void tcg_gen_helper_0_1ii(void *func, TCGv arg1, TCGv arg2, TCGv a | ||
| 471 | tcg_temp_free(tmp2); | 472 | tcg_temp_free(tmp2); |
| 472 | } | 473 | } |
| 473 | 474 | ||
| 474 | -static inline void tcg_gen_helper_1_i(void *func, TCGv ret, TCGv arg) | 475 | +static inline void tcg_gen_helper_1_i(void *func, TCGv ret, uint32_t arg) |
| 475 | { | 476 | { |
| 476 | TCGv tmp = tcg_const_i32(arg); | 477 | TCGv tmp = tcg_const_i32(arg); |
| 477 | 478 | ||
| @@ -479,7 +480,7 @@ static inline void tcg_gen_helper_1_i(void *func, TCGv ret, TCGv arg) | @@ -479,7 +480,7 @@ static inline void tcg_gen_helper_1_i(void *func, TCGv ret, TCGv arg) | ||
| 479 | tcg_temp_free(tmp); | 480 | tcg_temp_free(tmp); |
| 480 | } | 481 | } |
| 481 | 482 | ||
| 482 | -static inline void tcg_gen_helper_1_1i(void *func, TCGv ret, TCGv arg1, TCGv arg2) | 483 | +static inline void tcg_gen_helper_1_1i(void *func, TCGv ret, TCGv arg1, uint32_t arg2) |
| 483 | { | 484 | { |
| 484 | TCGv tmp = tcg_const_i32(arg2); | 485 | TCGv tmp = tcg_const_i32(arg2); |
| 485 | 486 | ||
| @@ -487,7 +488,7 @@ static inline void tcg_gen_helper_1_1i(void *func, TCGv ret, TCGv arg1, TCGv arg | @@ -487,7 +488,7 @@ static inline void tcg_gen_helper_1_1i(void *func, TCGv ret, TCGv arg1, TCGv arg | ||
| 487 | tcg_temp_free(tmp); | 488 | tcg_temp_free(tmp); |
| 488 | } | 489 | } |
| 489 | 490 | ||
| 490 | -static inline void tcg_gen_helper_1_1ii(void *func, TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3) | 491 | +static inline void tcg_gen_helper_1_1ii(void *func, TCGv ret, TCGv arg1, uint32_t arg2, uint32_t arg3) |
| 491 | { | 492 | { |
| 492 | TCGv tmp1 = tcg_const_i32(arg2); | 493 | TCGv tmp1 = tcg_const_i32(arg2); |
| 493 | TCGv tmp2 = tcg_const_i32(arg3); | 494 | TCGv tmp2 = tcg_const_i32(arg3); |
| @@ -497,7 +498,7 @@ static inline void tcg_gen_helper_1_1ii(void *func, TCGv ret, TCGv arg1, TCGv ar | @@ -497,7 +498,7 @@ static inline void tcg_gen_helper_1_1ii(void *func, TCGv ret, TCGv arg1, TCGv ar | ||
| 497 | tcg_temp_free(tmp2); | 498 | tcg_temp_free(tmp2); |
| 498 | } | 499 | } |
| 499 | 500 | ||
| 500 | -static inline void tcg_gen_helper_1_2i(void *func, TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3) | 501 | +static inline void tcg_gen_helper_1_2i(void *func, TCGv ret, TCGv arg1, TCGv arg2, uint32_t arg3) |
| 501 | { | 502 | { |
| 502 | TCGv tmp = tcg_const_i32(arg3); | 503 | TCGv tmp = tcg_const_i32(arg3); |
| 503 | 504 | ||
| @@ -505,7 +506,7 @@ static inline void tcg_gen_helper_1_2i(void *func, TCGv ret, TCGv arg1, TCGv arg | @@ -505,7 +506,7 @@ static inline void tcg_gen_helper_1_2i(void *func, TCGv ret, TCGv arg1, TCGv arg | ||
| 505 | tcg_temp_free(tmp); | 506 | tcg_temp_free(tmp); |
| 506 | } | 507 | } |
| 507 | 508 | ||
| 508 | -static inline void tcg_gen_helper_1_2ii(void *func, TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, TCGv arg4) | 509 | +static inline void tcg_gen_helper_1_2ii(void *func, TCGv ret, TCGv arg1, TCGv arg2, uint32_t arg3, uint32_t arg4) |
| 509 | { | 510 | { |
| 510 | TCGv tmp1 = tcg_const_i32(arg3); | 511 | TCGv tmp1 = tcg_const_i32(arg3); |
| 511 | TCGv tmp2 = tcg_const_i32(arg4); | 512 | TCGv tmp2 = tcg_const_i32(arg4); |
| @@ -722,7 +723,7 @@ static inline void get_fp_cond (TCGv t) | @@ -722,7 +723,7 @@ static inline void get_fp_cond (TCGv t) | ||
| 722 | typedef void (fcmp_fun32)(uint32_t, uint32_t, int); | 723 | typedef void (fcmp_fun32)(uint32_t, uint32_t, int); |
| 723 | typedef void (fcmp_fun64)(uint64_t, uint64_t, int); | 724 | typedef void (fcmp_fun64)(uint64_t, uint64_t, int); |
| 724 | 725 | ||
| 725 | -#define FOP_CONDS(fcmp_fun, type, arg0, arg1, fmt) \ | 726 | +#define FOP_CONDS(fcmp_fun, type, fmt) \ |
| 726 | static fcmp_fun * fcmp ## type ## _ ## fmt ## _table[16] = { \ | 727 | static fcmp_fun * fcmp ## type ## _ ## fmt ## _table[16] = { \ |
| 727 | do_cmp ## type ## _ ## fmt ## _f, \ | 728 | do_cmp ## type ## _ ## fmt ## _f, \ |
| 728 | do_cmp ## type ## _ ## fmt ## _un, \ | 729 | do_cmp ## type ## _ ## fmt ## _un, \ |
| @@ -741,17 +742,17 @@ static fcmp_fun * fcmp ## type ## _ ## fmt ## _table[16] = { \ | @@ -741,17 +742,17 @@ static fcmp_fun * fcmp ## type ## _ ## fmt ## _table[16] = { \ | ||
| 741 | do_cmp ## type ## _ ## fmt ## _le, \ | 742 | do_cmp ## type ## _ ## fmt ## _le, \ |
| 742 | do_cmp ## type ## _ ## fmt ## _ngt, \ | 743 | do_cmp ## type ## _ ## fmt ## _ngt, \ |
| 743 | }; \ | 744 | }; \ |
| 744 | -static inline void gen_cmp ## type ## _ ## fmt(int n, arg0 a, arg1 b, int cc) \ | 745 | +static inline void gen_cmp ## type ## _ ## fmt(int n, TCGv a, TCGv b, int cc) \ |
| 745 | { \ | 746 | { \ |
| 746 | tcg_gen_helper_0_2i(fcmp ## type ## _ ## fmt ## _table[n], a, b, cc); \ | 747 | tcg_gen_helper_0_2i(fcmp ## type ## _ ## fmt ## _table[n], a, b, cc); \ |
| 747 | } | 748 | } |
| 748 | 749 | ||
| 749 | -FOP_CONDS(fcmp_fun64, , uint64_t, uint64_t, d) | ||
| 750 | -FOP_CONDS(fcmp_fun64, abs, uint64_t, uint64_t, d) | ||
| 751 | -FOP_CONDS(fcmp_fun32, , uint32_t, uint32_t, s) | ||
| 752 | -FOP_CONDS(fcmp_fun32, abs, uint32_t, uint32_t, s) | ||
| 753 | -FOP_CONDS(fcmp_fun64, , uint64_t, uint64_t, ps) | ||
| 754 | -FOP_CONDS(fcmp_fun64, abs, uint64_t, uint64_t, ps) | 750 | +FOP_CONDS(fcmp_fun64, , d) |
| 751 | +FOP_CONDS(fcmp_fun64, abs, d) | ||
| 752 | +FOP_CONDS(fcmp_fun32, , s) | ||
| 753 | +FOP_CONDS(fcmp_fun32, abs, s) | ||
| 754 | +FOP_CONDS(fcmp_fun64, , ps) | ||
| 755 | +FOP_CONDS(fcmp_fun64, abs, ps) | ||
| 755 | #undef FOP_CONDS | 756 | #undef FOP_CONDS |
| 756 | 757 | ||
| 757 | /* Tests */ | 758 | /* Tests */ |
| @@ -2498,7 +2499,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | @@ -2498,7 +2499,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | ||
| 2498 | { | 2499 | { |
| 2499 | target_ulong btgt = -1; | 2500 | target_ulong btgt = -1; |
| 2500 | int blink = 0; | 2501 | int blink = 0; |
| 2501 | - int bcond = 0; | 2502 | + int bcond_compute = 0; |
| 2502 | TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL); | 2503 | TCGv t0 = tcg_temp_local_new(TCG_TYPE_TL); |
| 2503 | TCGv t1 = tcg_temp_local_new(TCG_TYPE_TL); | 2504 | TCGv t1 = tcg_temp_local_new(TCG_TYPE_TL); |
| 2504 | 2505 | ||
| @@ -2524,7 +2525,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | @@ -2524,7 +2525,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | ||
| 2524 | if (rs != rt) { | 2525 | if (rs != rt) { |
| 2525 | gen_load_gpr(t0, rs); | 2526 | gen_load_gpr(t0, rs); |
| 2526 | gen_load_gpr(t1, rt); | 2527 | gen_load_gpr(t1, rt); |
| 2527 | - bcond = 1; | 2528 | + bcond_compute = 1; |
| 2528 | } | 2529 | } |
| 2529 | btgt = ctx->pc + 4 + offset; | 2530 | btgt = ctx->pc + 4 + offset; |
| 2530 | break; | 2531 | break; |
| @@ -2543,7 +2544,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | @@ -2543,7 +2544,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | ||
| 2543 | /* Compare to zero */ | 2544 | /* Compare to zero */ |
| 2544 | if (rs != 0) { | 2545 | if (rs != 0) { |
| 2545 | gen_load_gpr(t0, rs); | 2546 | gen_load_gpr(t0, rs); |
| 2546 | - bcond = 1; | 2547 | + bcond_compute = 1; |
| 2547 | } | 2548 | } |
| 2548 | btgt = ctx->pc + 4 + offset; | 2549 | btgt = ctx->pc + 4 + offset; |
| 2549 | break; | 2550 | break; |
| @@ -2569,7 +2570,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | @@ -2569,7 +2570,7 @@ static void gen_compute_branch (DisasContext *ctx, uint32_t opc, | ||
| 2569 | generate_exception(ctx, EXCP_RI); | 2570 | generate_exception(ctx, EXCP_RI); |
| 2570 | goto out; | 2571 | goto out; |
| 2571 | } | 2572 | } |
| 2572 | - if (bcond == 0) { | 2573 | + if (bcond_compute == 0) { |
| 2573 | /* No condition to be computed */ | 2574 | /* No condition to be computed */ |
| 2574 | switch (opc) { | 2575 | switch (opc) { |
| 2575 | case OPC_BEQ: /* rx == rx */ | 2576 | case OPC_BEQ: /* rx == rx */ |
| @@ -6045,7 +6046,7 @@ static inline void gen_movcf_s (int fs, int fd, int cc, int tf) | @@ -6045,7 +6046,7 @@ static inline void gen_movcf_s (int fs, int fd, int cc, int tf) | ||
| 6045 | tcg_gen_ld_i32(r_tmp1, current_fpu, offsetof(CPUMIPSFPUContext, fcr31)); | 6046 | tcg_gen_ld_i32(r_tmp1, current_fpu, offsetof(CPUMIPSFPUContext, fcr31)); |
| 6046 | tcg_gen_andi_i32(r_tmp1, r_tmp1, ccbit); | 6047 | tcg_gen_andi_i32(r_tmp1, r_tmp1, ccbit); |
| 6047 | tcg_gen_brcondi_i32(cond, r_tmp1, 0, l1); | 6048 | tcg_gen_brcondi_i32(cond, r_tmp1, 0, l1); |
| 6048 | - tcg_gen_movi_i32(fp1, fp0); | 6049 | + tcg_gen_mov_i32(fp1, fp0); |
| 6049 | tcg_temp_free(fp0); | 6050 | tcg_temp_free(fp0); |
| 6050 | gen_set_label(l1); | 6051 | gen_set_label(l1); |
| 6051 | tcg_temp_free(r_tmp1); | 6052 | tcg_temp_free(r_tmp1); |
| @@ -6077,7 +6078,7 @@ static inline void gen_movcf_d (DisasContext *ctx, int fs, int fd, int cc, int t | @@ -6077,7 +6078,7 @@ static inline void gen_movcf_d (DisasContext *ctx, int fs, int fd, int cc, int t | ||
| 6077 | tcg_gen_ld_i32(r_tmp1, current_fpu, offsetof(CPUMIPSFPUContext, fcr31)); | 6078 | tcg_gen_ld_i32(r_tmp1, current_fpu, offsetof(CPUMIPSFPUContext, fcr31)); |
| 6078 | tcg_gen_andi_i32(r_tmp1, r_tmp1, ccbit); | 6079 | tcg_gen_andi_i32(r_tmp1, r_tmp1, ccbit); |
| 6079 | tcg_gen_brcondi_i32(cond, r_tmp1, 0, l1); | 6080 | tcg_gen_brcondi_i32(cond, r_tmp1, 0, l1); |
| 6080 | - tcg_gen_movi_i64(fp1, fp0); | 6081 | + tcg_gen_mov_i64(fp1, fp0); |
| 6081 | tcg_temp_free(fp0); | 6082 | tcg_temp_free(fp0); |
| 6082 | gen_set_label(l1); | 6083 | gen_set_label(l1); |
| 6083 | tcg_temp_free(r_tmp1); | 6084 | tcg_temp_free(r_tmp1); |
| @@ -6110,12 +6111,12 @@ static inline void gen_movcf_ps (int fs, int fd, int cc, int tf) | @@ -6110,12 +6111,12 @@ static inline void gen_movcf_ps (int fs, int fd, int cc, int tf) | ||
| 6110 | tcg_gen_shri_i32(r_tmp1, r_tmp1, cc); | 6111 | tcg_gen_shri_i32(r_tmp1, r_tmp1, cc); |
| 6111 | tcg_gen_andi_i32(r_tmp2, r_tmp1, 0x1); | 6112 | tcg_gen_andi_i32(r_tmp2, r_tmp1, 0x1); |
| 6112 | tcg_gen_brcondi_i32(cond, r_tmp2, 0, l1); | 6113 | tcg_gen_brcondi_i32(cond, r_tmp2, 0, l1); |
| 6113 | - tcg_gen_movi_i32(fp1, fp0); | 6114 | + tcg_gen_mov_i32(fp1, fp0); |
| 6114 | tcg_temp_free(fp0); | 6115 | tcg_temp_free(fp0); |
| 6115 | gen_set_label(l1); | 6116 | gen_set_label(l1); |
| 6116 | tcg_gen_andi_i32(r_tmp2, r_tmp1, 0x2); | 6117 | tcg_gen_andi_i32(r_tmp2, r_tmp1, 0x2); |
| 6117 | tcg_gen_brcondi_i32(cond, r_tmp2, 0, l2); | 6118 | tcg_gen_brcondi_i32(cond, r_tmp2, 0, l2); |
| 6118 | - tcg_gen_movi_i32(fph1, fph0); | 6119 | + tcg_gen_mov_i32(fph1, fph0); |
| 6119 | tcg_temp_free(fph0); | 6120 | tcg_temp_free(fph0); |
| 6120 | gen_set_label(l2); | 6121 | gen_set_label(l2); |
| 6121 | tcg_temp_free(r_tmp1); | 6122 | tcg_temp_free(r_tmp1); |